将泛型类对象发送到泛型方法(java)

ukdjmx9f  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(437)

我有一个班级叫 InstanceClass 具体如下:

package trials;

public class InstanceClass<T>  {

    private T num;

    public void calculate() {
        System.out.printf("%s", num);
    }
    public T getNum() {
        return num;
    }

    public void setNum(T num) {
        this.num = num;
    }

    public InstanceClass(T num) {
        super();
        this.num = num;
    }
}

以及 Trial 主方法所在的类,如下所示:

package trials;

public class TrialClass {

    public static void main(String[] args) {

        InstanceClass<Integer> my=new InstanceClass<>(2);
        InstanceClass<InstanceClass<Integer>> x=new InstanceClass<>(my);
        prt(x.getNum());
    }

    public static <T extends InstanceClass<Integer>> void prt(T q) {
        System.out.printf("%s%n",q.getNum());
        q.calculate();
    }
}

所以,我想知道为什么我们不能在方法prt的声明中使用而不是<t extends instanceclass>。

ma8fv8wu

ma8fv8wu1#

如果你改变了

public static <T extends InstanceClass<Integer>> void prt(T q)

public static <T> void prt(T q)

编译器不会知道类型参数 T 必须是一个 InstanceClass 因此它不会知道它有 getNum() 以及 calculate() 方法,您正试图从中调用 prt .
实际上,编译器允许您将 prt 方法的任何参数,包括与 InstanceClass ,其中没有您试图在内部调用的方法 prt .

相关问题