0

我有以下层次结构:

abstract class customType<E extends Number>
class customInteger extends customType<Integer>
class customFloat extends customType<Float> 

声明一个同时接受 customInteger 和 customFloat 的 LinkedList

List<customType<Number>> items = new LinkedList<customType<Number>>();

这种方法有效吗?

4

2 回答 2

2

customType<Number>与因此无关,customType<Integer>
因此如果您打算添加Integer或加入Floatitems那么这是无效的。
您可以尝试以下方法:

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);  
于 2013-04-07T17:16:52.333 回答
1

正如 Cratylus 所说,customType<Number>customType<Float>customType<Integer>是三种不相关的类型,所以这是行不通的。但是,您可以将List<customType<?>>其用作items. 两者customType<Float>customType<Integer>都是customType<?>(这意味着“任何customType,无论它具有什么通用参数值)的子类型,因此可以插入到集合中。

请注意,Java 约定是以大写字母开头的类型名称,因此您应该使用名称CustomTypeCustomIntegerCustomFloat

于 2013-04-07T19:47:36.180 回答