我第一次尝试在java中使用泛型方法。它不起作用,在我看来,Java泛型并不意味着以这种方式使用 - 我需要实现一个通用接口,而不是使用泛型方法。请确认(或否认)该结论。
这就是我要做的事情:
public <T> void updateItem( T item ) {
String itemKey = item.getKey();
...
这给了我错误'方法getKey()未定义类型T'。
调查为什么这不起作用我看到类型擦除“替换泛型类型中的所有类型参数及其边界或对象,如果类型参数是无界的”。
我可以“绑定”我的类型T的唯一方法是,如果我为我计划使用的所有类型创建一个公共子类或接口,如果我这样做,那么我可以使用多态而不是泛型。
答案 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()
,编译器可以解析它。