由于您的类的共同祖先是Object
,并且因为List<? extends Object>
不会使事情变得更干净(毕竟,一切都 extends 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());
}