由于你的类的共同祖先是 ,并且因为不会使事情变得更干净(毕竟,一切都会扩展),所以看起来是一个不错的选择。Object
List<? extends Object>
Object
List<Object>
但是,这样的列表将是一个混合包:您需要检查内部对象的运行时类型,并据此做出决定。这绝对不是一件好事。
更好的替代方法是创建自己的类,以统一的方式对列表的元素实现操作,并为以不同方式实现这些操作的每个子类型创建一个子类。这样,您就可以以统一的方式处理列表,将每个对象的差异化推送到包装器中。
public interface ItemWrapper {
int calculateSomething();
}
public abstract class IntWrapper implements ItemWrapper {
private int value;
public IntWrapper(int v) {
value=v;
}
public int calculateSomething() {
return value;
}
}
public abstract class DoubleListWrapper implements ItemWrapper {
private List<Double> list;
public DoubleListWrapper (List<Double> lst) {
list = lst;
}
public int calculateSomething() {
int res;
for (Double d : list) {
res += d;
}
return res;
}
}
// ...and so on
现在,您可以列出对象,并在不检查其类型的情况下对其进行列表:ItemWrapper
calculateSomething
List<ItemWrapper> myList = new ArrayList<ItemWrapper>();
for (ItemWrapper w : myList) {
System.out.println(
w.calculateSomething());
}