将通用 class 对象发送到通用方法 (java)

sending a generic class object to a generic method (java)

我有一个名为 InstanceClass 的 class,如下所示:

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;
    }
}

Trialclass其中main方法所在位置如下:

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 的声明中简单地使用 而不是 >。

如果你改变

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.

内部调用