gpt4 book ai didi

java - 面向对象/带数字的泛型

转载 作者:行者123 更新时间:2023-12-04 05:09:01 24 4
gpt4 key购买 nike

我有这种情况,但为什么 java 不尊重类层次结构?

import ...

public class GenericsTest {

public static void main(String[] args) {
List<Integer> myList = new ArrayList<Integer>();
myList.add(1);
myList.add(new Integer(2));
new GenericsTest().doInsert(myList);
}

private void doInsert(List<? extends Number> myList) { // Number <- Integer
myList.add(new Integer(1)); // This don't compiles
}
}

有人可以解释一下吗?
谢谢!!!

最佳答案

这不起作用的原因是引用的 List 的类型不必是整数。但是,以下将编译。

private void doInsert(List<Number> myList) { 
myList.add(new Integer(1));
}

连同:
private void doInsert(List<? extends Number> myList) { 
((List<Number>)myList).add(new Integer(1));
}

我已经根据@Eyal Schneider 的评论附加了这个答案,以表明如果您正确设置,列出的第二种方法确实有效。虽然这很可能不是一件好事。
public class Test{  
public void doInsert(List<? extends Number> myList) {
((List<Number>)myList).add(new Integer(1));
((List<Number>)myList).add(new Short("2"));
((List<Number>)myList).add(new BigDecimal("3"));
...
}

public static void main(String[] args){
Test t=new Test();
List<Number> list=new ArrayList<Number>();
t.doInsert(list);
for(Number number:list)
System.out.println(number);
}
}

关于java - 面向对象/带数字的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15121230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com