2014-01-26 4 views
1

new 키워드를 사용한 오브젝트 작성 구문에 관한 사항. 자체Java의 오브젝트 작성 구문

Foo ref = new Foo(); 

수행 자바 언어는 위에서 언급 한 바와 같이 표준 구문이 아닌 다른 객체를 만들 수있는 메커니즘을 제공 : 나는 객체를 생성하는 구문은 알고?

스칼라가 그러한 기능을 가지고 있거나 다른 JVM 호환 언어 일 수 있다는 지식이 있지만 핵심 자바 관점에서만 알고 싶습니다.

키워드 'new'및 할당 연산자 '='을 사용하지 않고. 예를 들어 Foo ref Create()와 같을 수 있습니다. ? 이제는 전통적인 구문을 대체 할 Create 메서드를 개발하려고합니다. 객체를 생성 할 수 있습니다

+2

http://stackoverflow.com/questions/95419/what-are-all-the-different-ways-to-create-an-object-in-java – Maroun

+2

할당 연산자에 ** 할일이 아무것도 없습니다. 물체의 ** 창조 **. –

답변

4

또 다른 방법은 반사입니다 :

Foo ref = Foo.class.newInstance() 
+0

당신 말이 맞지만 나는 'new'라는 키워드와 'operatior'= '라는 키워드를 사용하지 않고 어쩌면 생각하고있었습니다. 예를 들어 Foo ref Create()와 같을 수 있습니다. – Moby

0

Class.newInstance() 리플렉션 API의 예를 사용하여.

Foo ref = Foo.class.newInstance(); 

클래스 API에 대한 doc을 읽어보십시오. Spring Dependency injection로 가면 도움이 될 것입니다.

page 당신이 찾고있는 당신에게 좋은 시작 여기

+0

답장을 보내 주셔서 감사합니다. 그러나 객체 생성에 관한 한 유연성에 대해 생각하거나 생각하고 있습니다. Foo.Class.newInstance()는 여전히 미리 정의 된 구문에 바인딩합니다. 나는 자바 문법을 따르는 더 많은 유연성을 찾고 있지만, 내 자신의 의지로 객체 생성 과정을 커스터마이징 할 수있는 힘을 준다. – Moby

+0

그럼 당신이 찾고있는 것 같아요 의존성 주입 - 구성에 기반한 프레임 워크에 의한 객체 생성 – Keerthivasan

+0

@Octopus 그가 DI를 찾고 있다고 의심합니다. DSL과 커스텀 구문과 비슷합니다. –

2

입니다 제공 할 수 있습니다 :이 퀴즈 자바

에서 개체를 만들 수

다른 방법을. 예, 조금 까다로운 질문이며 사람들은 종종 혼란스러워합니다. 나는 나의 의심을 모두 없애기 위해 많은 수색을했습니다. 새 키워드 이은을 만들 수있는 가장 일반적인 방법입니다 사용

  1. :

    네 가지 방법이 자바 객체를 생성 (난 정말 모르는이 작업을 수행하는 다섯 번째 방법이있다)이다 java의 오브젝트. 나는 어딘가에서 거의 99 %의 물체가이 방법으로 만들어 짐을 읽었다.

MyObject object = new MyObject(); 우리가 공공 기본 생성자가있는 경우 우리는이 방법으로 개체를 만들 수있는 클래스 &의 이름을 알고있는 경우가 Class.forName() 를 사용

  1. .

MyObject object = (MyObject) Class.forName ("subin.rnd.MyObject"). newInstance();

  1. clone() 사용 clone()은 기존 개체의 복사본을 만드는 데 사용할 수 있습니다.

MyObject anotherObject = new MyObject(); MyObject object = anotherObject입니다.클론();

  1. 개체 deserialization 사용 개체 deserialization은 직렬화 된 양식에서 개체를 만드는 것일뿐입니다.

ObjectInputStream inStream = new ObjectInputStream (anInputStream); MyObject object = (MyObject) inStream.readObject();

이제 개체를 만드는 방법을 알았습니다. 그러나 그렇게 할 필요가있을 때만 객체를 생성하라는 권고를 받았다.


출처 : http://javabeanz.wordpress.com/2007/09/13/different-ways-to-create-objects/

P.S :이 링크가 다운 될 경우에도 볼 수 있도록 내가 게시물의 텍스트를 복사됩니다.
도움이 되었기를 바랍니다.

+0

그럼에도 불구하고, 이것은 표절이다. –

+0

링크가 죽을 수 있으며이 응답을 독립적으로 만들 수 있습니다. 내가 언급 한 소식과 함께 텍스트를 복사했습니다. 이것은 분명히 표절이 아닙니다. –

+0

소스 만 언급하는 것만으로는 충분하지 않습니다. 자신의 기여도가없는 복사 - 붙여 넣기 외에 답을 작성하는 것 역시 표절입니다. –

0

당신은 당신의 클래스의 정적 팩토리 메소드 작성하여 대부분의 코드에서 new 연산자를 사용하여 방지 할 수 있습니다

Foo f = Foo.create(); 

이 많이되지 않습니다 :

class Foo 
{ 
    public static Foo create() 
    { 
     return new Foo(); 
    } 
} 

그런 다음 인스턴스는 다음과 같습니다를 더 간결하지만 Effective Java의 섹션 1에 자세히 설명 된 것처럼 몇 가지 이점이 있습니다. 일반 유형 (Map<String,String> m = new HashMap<String,String>(); 대신 Map<String,String> m = Maps.newHashMap(); 대신)의 유형 유추가 가능하며 나중에이 메소드를 다음과 같이 변경할 수 있습니다. 예 : 각 호출마다 새 객체를 만드는 대신 객체를 메모하십시오.