2017-04-08 3 views
0

클래스에 개인 정적 개체를 여러 개 갖고 싶지만 복잡한 개체이고 특정 함수를 사용하여 일부 매개 변수로 초기화하고 싶습니다. 이상적으로, 나는 다음과 같은 코드를 작성합니다 - MakeAThing 방법은 새로운 객체를 생성했지만Java에서 메서드의 개체 초기화

public class TestClass{ 
    private Class ComplicatedObject{ 
     private int anInteger; 
     private String aString; 
     public ComplicatedObject(int inputInt,String inputString){ 
      anInteger = inputInt; 
      aString = inputString; 
     } 
     public void someMethod(){ 
      //do a thing 
     } 
    } 
    private void MakeAThing(ComplicatedObject theThing, int someInt,int someString){ 
     theThing = new ComplicatedObject(someInt,someString); 
     //do extra stuff that one might want to do here 
    } 
    private static ComplicatedObject IMPORTANT_OBJECT; 
    public TestClass(){ 
     MakeAThing(IMPORTANT_OBJECT, 0,"Test"); 
     IMPORTANT_OBJECT.someMethod(); 
    } 
} 

이 (지금까지 내가 자바를 이해) 때문에 충돌합니다 내가 IMPORTANT_OBJECTsomeMethod()를 호출 할 때, IMPORTANT_OBJECT 실제로 null의 경우 내부 참조 (theThing)만이 실제로 새 객체를 참조했습니다. IMPORTANT_OBJECT에 대한 참조는 여전히 null입니다.

IMPORTANT_OBJECT에 대한 참조를 변경하여 새 개체를 참조 할 수있는 방법을 쓸 수 있습니까?

(네, 하나의 쉬운 해결책은 단지 IMPORTANT_OBJECT = new Object();라고 말하고 나중에 매개 변수를 추가하는 것이지만 내 코드가 실제로는 지저분해질 수 있습니다 (많은 "중요한 개체"가 있음). 다른 방법이 있다면 많은 그것을 선호하는 거라고)

+0

매개 변수가있는'Object'에 대한 생성자가 없습니다. 귀하의 질문은 매우 불분명합니다. [mcve]가 포함되도록 질문을 업데이트하십시오. 나는. 실제로 컴파일되는 코드. –

+2

'private static IMPORTANT_OBJECT;'컴파일시에 타입을 정의해야합니다. 그렇지 않으면 컴파일되지 않습니다. –

+0

이 코드는 컴파일하지 않아야합니다. 왜냐하면 IMPORT_OBJECT – Sarker

답변

1

어떻게 기능에 대한 새로운 ComplicatedObject 돌려주는 :.

private ComplicatedObject MakeAThing(int someInt,int someString){ 
    return new ComplicatedObject(someInt,someString); 
} 

을 그리고 단지의 TestClass 생성자에서 IMPORTANT_OBJECT를 초기화

public TestClass(){ 
    IMPORTANT_OBJECT = (0,"Test"); 
    IMPORTANT_OBJECT.someMethod(); 
} 
,536,

아니면 질문을 오해 한 적이 있습니까?

+0

그건 작동합니다, 일종의. 이 문제의 일부는'IMPORTANT_OBJECT'가 이미 초기화되었고 다시 초기화 할 필요가없는 경우가있을 수 있지만'if (null! = IMPORTANT_OBJECT) return IMPORTANT_OBJECT; '와 같은 것으로 해결 될 수 있습니다. –