在Java中使用泛型方法参数

Tom*_*Tom 1 java generics

我第一次尝试在java中使用泛型方法.它不起作用,在我看来,Java泛型并不意味着以这种方式使用 - 我需要实现一个通用接口,而不是使用泛型方法.请确认(或否认)该结论.

这就是我想要做的:

public <T> void updateItem( T item ) {
  String itemKey = item.getKey();
  ...
Run Code Online (Sandbox Code Playgroud)

这给了我错误'方法getKey()未定义类型T'.

调查为什么这不起作用我看到类型擦除"用类型参数无界限替换泛型类型中的所有类型参数及其边界或对象".

我可以"绑定"我的类型T的唯一方法是,如果我为我计划使用的所有类型创建一个公共子类或接口,如果我这样做,那么我可以使用多态而不是泛型.

Ale*_*exR 5

这是正确的.方法getKey()没有在课堂上定义T.但是,如果您将方法定义如下:

public <T extends Entry> void updateItem( T item ) {
  String itemKey = item.getKey();
Run Code Online (Sandbox Code Playgroud)

编译器可以找到getKey()方法.请注意我使用<T extends Entry>(我的意思java.util.Map.Entry).这个类有方法getKey(),编译器可以解决它.