我正在从C ++迁移到Java。现在,我正在尝试泛型方法。但是编译器总是抱怨以下错误
对于类型T HelloTemplate.java / helloTemplate / src / helloTemplate,未定义方法getValue()
错误指向t.getValue()行据我了解,T是类MyValue,它具有方法getValue
怎么了?我该如何解决。我正在使用Java1.8
public class MyValue {
public int getValue() {
return 0;
}
}
public class HelloTemplate {
static <T> int getValue(T t) {
return t.getValue();
}
public static void main(String[] args) {
MyValue mv = new MyValue();
System.out.println(getValue(mv));
}
}
Run Code Online (Sandbox Code Playgroud)
编译器不知道您将传递给getValue()具有getValue()方法的类的实例,这就是为什么t.getValue()不传递编译的原因。
仅当您添加绑定到泛型类型参数的类型时,它才会知道T:
static <T extends MyValue> int getValue(T t) {
return t.getValue();
}
Run Code Online (Sandbox Code Playgroud)
当然,在这样一个简单的示例中,您可以简单地删除泛型类型参数并编写:
static int getValue(MyValue t) {
return t.getValue();
}
Run Code Online (Sandbox Code Playgroud)