首页 > 解决方案 > JAVA泛型构造函数问题

问题描述

我现在正在研究 JAVA 泛型并发现一些奇怪的情况。

class A{
    public void mInA(){
        System.out.println("mInA");
    }
}

interface I{
    public void mInInterfaceI();
}

class B extends A implements I{
    public void mInInterfaceI(){
        System.out.println("mInterfaceI");
    }
}

class MyList <TP1, TP2>{
    MyList(TP1 data1){
        this.data1 = data1;
    }

    TP1 data1;
    TP2 data2;
    MyList<TP1, TP2> next;
}

public class GenericPrepare {
    public static void main(String[] args){
        B obj = new B();

        MyList<A,B> anchor = new MyList<>(obj);//Curious

        anchor.data2 = new B();
        anchor.next = null;
    }
}

我的构造函数旨在将 TP1 作为输入。所以我必须在上面的注释中输入“A”类型引用作为参数。
但是当我输入“B”类型引用作为参数时,JAVA 并没有抱怨它。
我不知道这里发生了什么。

标签: java

解决方案


MyList<A,B> 构造函数需要一个 A 对象作为参数,但是因为 B 扩展了 A,所以 B 实际上可以分配给 A -> 您的代码可以工作。


推荐阅读