我有一个方法<T> void method(T element,Collection<T> list)
,我可以将其称为method("A",list)
,其中列表可以是List<String>
或List<Object>
但如果我致电method(new Object(),list)
列表为List<String>
提前致谢。
答案 0 :(得分:4)
此示例显示,即使List<String>
IS-A List<Object>
,您的String
也不是Object
。您应该使用通用通配符:
<T> void method(T element,Collection<? extends T> list)
答案 1 :(得分:2)
查看方法<T> void method(T element,Collection<T> list)
使用通用方法时,会找到合适的T.如果不存在这样的T,则抛出编译时异常。
method("A",new List<String>)
Object
和String
String
和String
之间的任何值,因为通用参数由List<String>
明确定义 T是String
method("A",new List<Object>)
Object
和String
Object
和Object
之间的任何值,因为通用参数由List<Object>
明确定义 T是Object
method(new Object(),new List<String>)
new Object()
T可以是Object
和Object
之间的任何内容String
和String
之间的任何值,因为通用参数由List<String>
明确定义没有T同时满足两者