2017-04-08 73 views
0

假設我想在一個類中有一堆私有靜態對象,但它們是複雜的對象,我想用特定的函數用一些參數初始化它們。理想情況下,我會這樣寫代碼:用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(); 
    } 
} 

這將會崩潰,因爲(據我理解Java)當我打電話someMethod()IMPORTANT_OBJECTIMPORTANT_OBJECT實際上是空 - 該MakeAThing方法確實創造了一個新的對象,但只有其內部參考(theThing)實際引用了新對象。 IMPORTANT_OBJECT的參考仍爲空。

有沒有什麼辦法可以編寫一個方法來改變引用IMPORTANT_OBJECT引用一個新的對象?

(是的,我知道一個簡單的解決方案只是說IMPORTANT_OBJECT = new Object();,然後再添加參數,但這會使我的代碼非常混亂(有很多「重要對象」),如果有另一種方式,我倒是更喜歡它)

+0

沒有具有參數的「對象」的構造函數。你的問題很不清楚。請更新您的問題以包含[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(); 
} 

還是我誤解了這個問題?

+0

工作,有點。部分問題是會出現'IMPORTANT_OBJECT'已經被初始化並且不需要再次初始化的情況,但是可以通過類似'if(null!= IMPORTANT_OBJECT)return IMPORTANT_OBJECT;'來解決。 –