Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 参数悖论?(不知道如何使用word)_Java - Fatal编程技术网

Java 参数悖论?(不知道如何使用word)

Java 参数悖论?(不知道如何使用word),java,Java,所以我不知道该怎么说,所以我只举一个例子: public class test { private Object1 o1; private Object2 o2; private Object3 o3; public test() { o1 = new Object1(o2, o3); o2 = new Object2(o1); o3 = new Object3(o1); } } 所以我的问题是,我需要以

所以我不知道该怎么说,所以我只举一个例子:

public class test {
    private Object1 o1;
    private Object2 o2;
    private Object3 o3;

    public test() {
        o1 = new Object1(o2, o3);
        o2 = new Object2(o1);
        o3 = new Object3(o1);
    }
}
所以我的问题是,我需要以这些方式给出这3个对象的参数,我会遇到问题,因为当我把o2和o3作为o1时,它们是空的。如果我尝试在o1之上实例化o2和o3,o1为空,问题再次出现。有人能帮我找到解决办法吗。我还想将这3个对象分开,即不给o2或o3一个o1字段。

您所面对的 这是你必须不惜一切代价避免的

为了满足您的迫切需要,您可以使构造函数不接受依赖对象,定义集合方法,使用空构造函数创建对象,然后通过将对象传递给这些集合方法将它们连接在一起

public class test { 
        private Object1 o1; 
        private Object2 o2; 
        private Object3 o3; 

        public test() { 
            o1 = new Object1(); 
            o2 = new Object2(); 
            o3 = new Object3();

            o1.setO2(o2);
            o1.setO3(o3);

            o2.setO1(o1);
            o3.setO1(o1);

        } 
    }

这个问题的简单解决方法是使用方法来初始化,而不是使用构造函数。 定义方法,比如init&使用默认构造函数或无参数构造函数。现在创建所有对象&按正确的顺序对所有对象调用init方法。 你可以在这里再做一件事。让我们看看。。。 您可以使用两个参数定义构造函数&define方法,而不是一个参数构造函数&define方法从两个参数构造函数调用该方法。首先,在Object2和Object3中定义init方法。Object1.的构造函数

现在,创建对象的代码如下所示

public class test { 
    private Object1 o1;
    private Object2 o2;
    private Object3 o3;
    public test() {
        o2 = new Object2();
        o3 = new Object3();
        o1 = new Object1(o2, o3);
    }
}

对于什么样的问题,您需要这种初始化?这是针对需要添加3个相互交互的JPanel的JFrame。首先创建JPanel,然后在构建后将属性放入。否则你无法避免这种循环。此外,构造函数名o1等必须与类名Object1等匹配。。此外,您还应该遵循Java命名约定。我认为这不是一个好的实践。您应该描述您的根本问题,以找到其他解决方案,而不是使用这3个。但如果您需要解决方案,我建议您应该尝试使用get/setter方法,而不是通过构造函数传递对象。@LewBloch啊,是的,我修复了构造函数。在编写此示例时忽略了它。
public class test { 
    private Object1 o1;
    private Object2 o2;
    private Object3 o3;
    public test() {
        o2 = new Object2();
        o3 = new Object3();
        o1 = new Object1(o2, o3);
    }
}