假设我有一个名为Data
的类,它有一个变量var1
然后我有一个名为Data2
的类,其扩展Data
,其中包含一个额外的变量 - var2
。
然后Data3
使用添加的变量Data2
扩展var3
,依此类推。
现在我有ArrayList
需要接受Datax
对象(即。Data1
,Data2
或Data3
),但无法接受任何其他对象。
因此,使用通用Object
类无法在此处运行。
有没有办法实现这个目标?也许我接近这一切都错了。我试过搞乱接口,但我的OOP
知识很差。
提前感谢您的帮助!
修改
道歉,因为之前没有提到这一点。我不能在类中使用泛型Object
的原因是因为所有Datax
类都需要使用XML库进行序列化,并且它不支持通用值。
答案 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"