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

问题描述

我有一个名为 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类,其中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 中调用的方法{1}}。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...