Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将泛型类对象发送到泛型方法(java)_Java_Generics_Type Parameter_Generic Method - Fatal编程技术网

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

将泛型类对象发送到泛型方法(java),java,generics,type-parameter,generic-method,Java,Generics,Type Parameter,Generic Method,我有一个名为InstanceClass的类,如下所示: package trials; public class InstanceClass<T> { private T num; public void calculate() { System.out.printf("%s", num); } public T getNum() { return num; } public

我有一个名为
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;
    }
}
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)
publicstaticvoidprt(tq)

publicstaticvoidprt(tq)
编译器不知道类型参数
t
必须是
InstanceClass
,因此它不知道它有
getNum()
calculate()
方法,您正试图从
prt
调用这些方法

事实上,编译器将允许您向
prt
方法传递任何参数,包括与
InstanceClass
无关的类的实例,这些类在
prt
中没有您试图调用的方法

public static <T> void prt(T q)