我有以下层次结构:
abstract class customType<E extends Number>
class customInteger extends customType<Integer>
class customFloat extends customType<Float>
声明一个同时接受customInteger和customFloat
的LinkedListList<customType<Number>> items = new LinkedList<customType<Number>>();
这种方法有效吗?
答案 0 :(得分:2)
customType<Number>
与customType<Integer>
无关
因此,如果您计划在Integer
中添加Float
或items
,则无效。
您可以尝试以下方法:
List<CustomType<?>> items = new LinkedList<CustomType<?>>();
将此作为项目的集合。要添加项目,您应该使用辅助方法,如下所示:
public static void addItemToList(List<? super CustomType<?>> l, CustomType<? extends Number> o){
l.add(o);
}
然后你可以添加到列表中:
CustomFloat f = new CustomFloat();
CustomInteger i = new CustomInteger();
process(items, i);
process(items, f);
答案 1 :(得分:1)
正如Cratylus所述,customType<Number>
,customType<Float>
和customType<Integer>
是三种不相关的类型,因此这不起作用。但是,您可以使用List<customType<?>>
作为items
的类型。 customType<Float>
和customType<Integer>
都是customType<?>
的子类型(这意味着“任何customType
,无论它具有什么泛型参数值),因此可以插入到集合中。
请注意,Java约定是使用大写字母开始类型名称,因此您应使用名称CustomType
,CustomInteger
和CustomFloat
。