Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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 - Fatal编程技术网

Java 关于通配符参数化类型的混淆

Java 关于通配符参数化类型的混淆,java,generics,Java,Generics,我有两门课,如下所示。据我所知,编译器不能抱怨第4行的类通配符,因为我的参数化类型是Node?超级编号>s0,因为对象在参数化类型中是超级编号。但编译器在4、8和9处抱怨。为什么会这样 public class Node<E> { private E data; public void setData(E obj) { data = obj; } public E getData() { return data;

我有两门课,如下所示。据我所知,编译器不能抱怨第4行的类通配符,因为我的参数化类型是Node?超级编号>s0,因为对象在参数化类型中是超级编号。但编译器在4、8和9处抱怨。为什么会这样

public class Node<E> {

    private E data;

    public void setData(E obj) {
        data = obj;
    }

    public E getData() {
        return data;
    }
}


public class WildCard {


    static void checkIt(Node<? super Number> s0)
    {
        Object object=new Object(); //1
        Number number =1.5; //2
        Integer integer=10; //3

        s0.setData(object); //4
        s0.setData(number); //5
        s0.setData(integer); //6

        object=s0.getData(); //7
        number=s0.getData(); //8
        integer=s0.getData(); //9
    }
}
Java语言规范规定:

可以为通配符指定显式边界,就像常规类型一样 变量声明。上限由以下内容表示: 语法,其中B是绑定:

??延伸B

与方法签名中声明的普通类型变量不同,没有类型 使用通配符时需要进行推断。因此,它是 允许使用以下命令声明通配符的下限 语法,其中B是下限:

??超级B

这里,可以将referent插入到元素类型为 所指对象的类型T;T是通配符的下界。

Java语言规范说:

可以为通配符指定显式边界,就像常规类型一样 变量声明。上限由以下内容表示: 语法,其中B是绑定:

??延伸B

与方法签名中声明的普通类型变量不同,没有类型 使用通配符时需要进行推断。因此,它是 允许使用以下命令声明通配符的下限 语法,其中B是下限:

??超级B

这里,可以将referent插入到元素类型为
所指对象的类型T;T是通配符的下界。

问题如下:


Node问题如下:

节点
Reference(T referent, ReferenceQueue<? super T> queue);