在Java中初始化方法中的对象

时间:2017-04-08 19:13:11

标签: java initialization pass-by-reference

假设我想在类中有一堆私有静态对象,但它们是复杂的对象,我想使用特定的函数用一些参数初始化它们。理想情况下,我会编写这样的代码:

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();
    }
}

当我在someMethod()上调用IMPORTANT_OBJECT时,IMPORTANT_OBJECT实际上为空时,这会因为(据我了解Java)而崩溃 - MakeAThing方法确实创建了一个新的object,但只有它的内部引用(theThing)实际引用了新对象。 IMPORTANT_OBJECT的引用仍为空。

有没有什么方法可以编写一个方法来改变IMPORTANT_OBJECT引用新引用的引用?

(是的,我知道一个简单的解决方案就是只说IMPORTANT_OBJECT = new Object();然后再添加参数,但这会让我的代码变得非常混乱(有很多"重要的对象"如果还有另一种方式,我更喜欢它。)

1 个答案:

答案 0 :(得分: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();
}

或者我误解了这个问题?