引用从根类扩展的所有类 - Java

时间:2016-06-28 08:43:51

标签: java class oop interface

假设我有一个名为Data的类,它有一个变量var1

然后我有一个名为Data2的类,其扩展Data,其中包含一个额外的变量 - var2

然后Data3使用添加的变量Data2扩展var3,依此类推。

现在我有ArrayList需要接受Datax对象(即。Data1Data2Data3),但无法接受任何其他对象。

因此,使用通用Object类无法在此处运行。

有没有办法实现这个目标?也许我接近这一切都错了。我试过搞乱接口,但我的OOP知识很差。

提前感谢您的帮助!

修改

道歉,因为之前没有提到这一点。我不能在类中使用泛型Object的原因是因为所有Datax类都需要使用XML库进行序列化,并且它不支持通用值。

2 个答案:

答案 0 :(得分:0)

创建标记界面。

interface IDataObject {
}

Data1类实现IDataObject

class Data1 implements IDataObject {
....
}

然后你可以这样做:

List<IDataObject> list = new ArrayList<>();
list.add(new Data1());
list.add(new Data2());
list.add(new Data3());

<强> UPD

如果您的所有Datax类都具有相同的父级,则可以避免使用接口并执行此操作

List<? super Data1> data = new ArrayList<>();
data.add(new Data1());
data.add(new Data2());
data.add(new Data3());

此处Data1是所有Datax类的父类

答案 1 :(得分:0)

继承似乎形成了一个列表。因为那个不需要继承,可以简化所有。

public class Data {
    Data previous;
    Object var;

    public Data(Object var) {
        this.var = var;
    }

    public Data(Object var, Data previous) {
        this.var = var;
        this.previous = previous;
    }
}

Data data = new Data("a");
data = new Data("b", data);
data = new Data("c", data);

data.var -> "a"
data.previous.var -> "b"
data.previous.previous.var -> "c"
data.previous.previous.previous -> null

data: -> "a" -> "b" -> "c"