Java泛型超级关键字我读过这些话题仿制药.?超级T用“Super”关键字包围泛型不过,我似乎还是有点迷茫super关键词:当我们宣布这样的收藏时:List<? super Number> list = null;list.add(new Integer(0));
//this compileslist.add(new Object());//this doesn't compile应该是相反的吗?我们有一个包含(未知类型的)对象的列表,这些对象是Number..所以Object应该适合(因为它是Number),以及Integer不应该。相反的是出于某种原因。如果我们有以下代码static void test(List<? super Number> param) {
param.add(new Integer(2));}public static void main(String[] args) {
ArrayList<String> sList = new ArrayList<String>();
test(sList); //will never compile, however...}编译上述代码是不可能的(我的理智表明这是正确的行为),但是基本的逻辑可以证明相反的情况:String is Object, Object is superclass of Number. So String should work.我知道这很疯狂,但这不是他们不允许的原因吗?<S super T>建筑?如果是,那为什么<? super T>是允许的吗?有人能帮我恢复这个逻辑链中缺失的部分吗?
3 回答

阿晨1998
TA贡献2037条经验 获得超6个赞
List<? super Number>
Number
Number extends Object implements Serializable
List<? super Number>
List<Number>
List<Object>
List<Serializable>
add(Integer.valueOf(0))
add(new Object())
List<Number>
List<Serializable>
add
Number
List<? super Number>
List<? super Number>
Object
Number
Number
List<Number>
参考文献
(“当具体的参数化类型过于限制性时。”) (“因为这没有道理。”)
另见
有效Java第二版 ,第28项:使用有界通配符来增加api的灵活性。 “果胶代表生产者- extends
,消费者- super
相关问题
太多了,太少了,胸肌, new Integer(0)
VS valueOf
等
添加回答
举报
0/150
提交
取消