2017-04-08 6 views
0

クラス内にプライベートな静的オブジェクトがたくさんあるとしますが、それらは複雑なオブジェクトであり、特定の関数を使用していくつかのパラメータで初期化したいと考えています。理想的には、私はこのようなコードを記述します。(私の知る限りのJavaを理解したように)私はIMPORTANT_OBJECTsomeMethod()を呼び出すとき、IMPORTANT_OBJECTが実際にnullであるため、これがクラッシュします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(); 
    } 
} 

を - MakeAThing方法は、新しいオブジェクトを作成しましたが、その内部参照(theThing)のみが実際に新しいオブジェクトを参照しました。 IMPORTANT_OBJECTの参照はまだnullです。

IMPORTANT_OBJECTの参照を新しいオブジェクトの参照に変更する方法はありますか?

(はい、簡単な解決策はIMPORTANT_OBJECT = new Object();とし、後でパラメータを追加することがわかりますが、これによってコードが実際に乱雑になります(重要なオブジェクトが多数あります)。 。「NEW ComplicatedObjectを返す機能についてどのように

+0

パラメータを持つ 'Object'のコンストラクタはありません。あなたの質問は非常に不明です。質問を更新して[mcve]を追加してください。私。実際にコンパイルされるコード –

+2

'private static IMPORTANT_OBJECT;'コンパイル時に型を定義する必要があります。それ以外の場合はコンパイルされません。 –

+0

このコードはコンパイルしないでください。IMPORT_OBJECTのデータ型がないため、 – Sarker

答えて

1

)それを好む多くをD:

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

そして、ちょうどTestClassをコンストラクタで

public TestClass(){ 
    IMPORTANT_OBJECT = (0,"Test"); 
    IMPORTANT_OBJECT.someMethod(); 
} 
をIMPORTANT_OBJECTを初期化します

質問を誤解しましたか?

+0

それは動作します。問題の一部は、 'IMPORTANT_OBJECT'がすでに初期化されていて、再度初期化する必要がないケースがあるかもしれないが、' if(null!= IMPORTANT_OBJECT)return IMPORTANT_OBJECT; 'などで解決できるということでした。 –

関連する問題