在Java中使用泛型方法参数

时间:2013-04-04 17:04:04

标签: java generics

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

这就是我要做的事情:

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

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

调查为什么这不起作用我看到类型擦除“替换泛型类型中的所有类型参数及其边界或对象,如果类型参数是无界的”。

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

1 个答案:

答案 0 :(得分:5)

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

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

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