如何调用泛型方法?

时间:2014-05-18 13:08:33

标签: java generics

我有一个方法<T> void method(T element,Collection<T> list),我可以将其称为method("A",list),其中列表可以是List<String>List<Object>

但如果我致电method(new Object(),list)列表为List<String>

,则会失败

提前致谢。

2 个答案:

答案 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>)

  • 第一个论点&#34; A&#34; T可以是ObjectString
  • 之间的任何值
  • 第二个参数T可以是StringString之间的任何值,因为通用参数由List<String>明确定义

T是String

method("A",new List<Object>)

  • 第一个论点&#34; A&#34; T可以是ObjectString
  • 之间的任何值
  • 第二个参数T可以是ObjectObject之间的任何值,因为通用参数由List<Object>明确定义

T是Object

method(new Object(),new List<String>)

  • 第一个参数new Object() T可以是ObjectObject之间的任何内容
  • 第二个参数T可以是StringString之间的任何值,因为通用参数由List<String>明确定义

没有T同时满足两者