Eclipse无法在数组中看到对象

时间:2014-09-09 10:50:59

标签: java arrays eclipse

我的问题对我来说很奇怪,并且与java语言有关。我创建了接口和2个类。在界面中我创建了2个对象:public static final MyInterface obA和obB。在每个类中,我创建了存储这些对象的数组。如果我想显示第一类数组,我看不到任何对象。在第二课中,我只看到了第一个对象。我的代码:

public class ROpole implements IDevices {

private static IDevices rOpole = IDevices.rOpole;
private static IDevices rGdańsk = IDevices.rGdańsk;

private IDevices [] connectedWith = {rGdańsk, null};

...

}

public class RGdańsk implements IDevices {

private static IDevices rOpole = IDevices.rOpole;
private static IDevices rGdańsk = IDevices.rGdańsk;

private IDevices [] connectedWith = {rOpole, null, null};

...

}

public interface IDevices {

public static final IDevices rOpole = new ROpole();
public static final IDevices rGdańsk = new RGdańsk();

...

}

我想要显示对象的结果:
rOpole:连接:null,null。
rGdańsk:连接:Model.ROpole@74a14482,null,null。

我不知道为什么对象在这些数组中是不可见的。

我显示对象的方法:

public String getInfoAboutDevice() {
    String informationsAboutDevice = "";
    informationsAboutDevice += "Connected with: ";

    for(int count = 0; count < connectedWith.length; count++) {
        if(count == interfaces.length - 1) informationsAboutDevice += connectedWith[count] + ".";
        else informationsAboutDevice += connectedWith[count] + ", ";
    }

    informationsAboutDevice += "\n";

    return informationsAboutDevice;
}

2 个答案:

答案 0 :(得分:1)

为什么在接口中使用静态字段的继承? 宣布为final的那些在实例化后不会改变。

因此,为了实例化ROpoleRGdańsk,JVM需要解析IDevices

IDevices必须初始化最终字段IDevices.rOpole;目前,最终字段IDevices.rGdańsknull

创建了ROpole类型的对象,其connectedWith数组填充了对null

IDevices.rGdańsk引用

然后IDevices必须初始化最终字段IDevices.rGdańsk;目前IDevices.rOpole引用刚创建的ROpole对象,因此IDevices.rGdańsk字段connectedWith包含:Model.ROpole@74a14482

您需要检查您的设计:Java Interfaces旨在定义类型和(在Java 8中)行为。您不应该使用它们来继承状态,除非它是静态状态,因此严格地与类型相关并在该类型的所有实例之间共享。

答案 1 :(得分:0)

这是静态初始化顺序的问题。加载IDevices后,首先会实例化其rOpole静态字段,然后rGdańsk。但是,这意味着ROpole构造函数将在IDevices.rGdańsk被分配之前运行,因此无法获取正确的引用。