我有一个方法需要List<X<?>>
。当我尝试将它传递一个List<X<Long>>
它无法编译。为什么?为什么我不能做列表<X<Long>>作为列表的参数<X<?>>
2
A
回答
2
A List<X<Long>>
不计为List<X<?>>
。考虑List<X<?>>
的add
方法。这需要X<?>
类型的参数,并X<Integer>
算作X<?>
。如果我们能够通过一个List<X<Long>>
到你的方法,我们可以做
public static void foo(List<X<?>> arg) {
arg.add(new X<Integer>());
}
public static void main(String[] args) {
foo(new ArrayList<X<Integer>>());
}
,我们会增加一个X<Integer>
到List<X<Long>>
,违反类型安全。
而不是采取一个List<X<?>>
,让你的方法一般:
public static void <T> foo(List<X<T>> arg) {
...
}
0
泛型是不随类型参数。 List<X<Long>>
不是List<X<?>>
即使X<Long>
是X<?>
亚型亚型,就像List<String>
怎么不是List<Object>
即使String
是Object
子类型的子类型。
void foo(List<? extends X<?>> arg) {
...
}
相关问题
- 1. 为什么我不能将列表<T:界面>添加到列表<列表<Interface>>?
- 2. 为什么我不能从列表<MyClass>转到列表<object>?
- 3. 为什么Java不能将ArrayList <TreeSet <Integer>>转换为列表<Set<Object>>?
- 4. 为什么列表<String>不被接受为列表<Object>?
- 5. 为什么我不能将IEnumerable <T>列表投射到BindingList <t>?
- 6. 我怎么做我的DataGridView等于我的列表<列表<decimal>>?
- 7. 为什么列表<Number>不是列表<Object>的子类型?
- 8. 为什么我不能动作<Int32>动作<Object>?
- 9. 为什么列表<T> .AddRange(IEnumerable的<T>)高于新表快<T>(IEnumerable的<T>)
- 10. 为什么协变类型参数不允许我写[列表<object> lst =新列表<string>()]?
- 11. 列表<Object>和列表<?>
- 12. 与列表<>参数
- 13. 类型不匹配:无法从列表<SelectOption <Integer>>转换为列表<SelectOption <String>>?
- 14. 将列表<TypeA>转换为列表<TypeB>
- 15. 将列表<String>转换为列表<int>
- 16. 无法从列表<T>转换为列表<T>
- 17. 将列表<int>转换为列表<long>
- 18. 如何将列表<String>转换为列表<Integer>?
- 19. 如何将列表<string>转换为列表<myEnumType>?
- 20. 如何将列表<interface>转换为列表<concrete>?
- 21. 列表<PropertyInfo>除列表<PropertyInfo>不工作
- 22. ICollection的<T>为什么SerializationBinder是通话的HashSet <T>但不能在列表<T>
- 23. 列表<string>列出<DateTime>
- 24. 列表<double[][]>列出<double[]>
- 25. C#列表<>为xml
- 26. 列表<Product>。加入(列表<Order>,...)与列表<Order>。加入(列表<Product>,...)?
- 27. LINQ2SQL表:表<fieldname>作为参数
- 28. 为什么没有strings.Cast <object> cast列表<string>到列表<object>?
- 29. 为什么我的结果类型列表<IEnumerable <T>>
- 30. 什么是转换列表<Byte>列出<Integer>
你能不能告诉我们,真实失败的实际代码,编译错误消息:
如果要能够采取论据与不同类型的参数,可以在顶层使用通配符? – childofsoong
你应该申报你的方法作为'富(名单> ARG)',而不是'FOO(名单>)'。 –
user2357112