如何使用Java泛型方法?

use*_*883 2 java generics

我正在从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)

Era*_*ran 6

编译器不知道您将传递给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)