1

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

这就是我想要做的:

public <T> void updateItem( T item ) {
  String itemKey = item.getKey();
  ...

这给了我错误“类型 T 的方法 getKey() 未定义”。

研究为什么这不起作用,我看到类型擦除“如果类型参数是无界的,则用它们的边界或 Object 替换泛型类型中的所有类型参数”。

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

4

1 回答 1

5

这是对的。getKey()类中没有定义方法T。但是,如果您将方法定义如下:

public <T extends Entry> void updateItem( T item ) {
  String itemKey = item.getKey();

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

于 2013-04-04T17:07:39.667 回答