gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:06:57 25 4
gpt4 key购买 nike

我有 2 个类如下。根据我的理解,编译器不能在第 4 行(WildCard 类)提示,因为我的参数化类型是(Node?super Number> 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
}
}

最佳答案

问题如下:

Node<? super Number>意味着你可以传入任何 Node参数类型为 Number或 super 类型,例如Object .

由于您不知道该通用参数的确切类型,因此不允许进行某些操作。

以下是为什么有些行编译而有些行不编译的原因的简短分解:

  • s0.setData(object);不编译,因为你可能有一个 Node<Number>这不会让你添加任意对象
  • s0.setData(number);Number 开始编译匹配参数的所有可能类型
  • s0.setData(integer);编译因为 Integer延伸Number因此上面的行适用

  • object=s0.getData();编译是因为任何数据对象都扩展了 Object , 总是

  • number=s0.getData();不编译,因为你可能有一个 Node<Object>因此数据对象可能具有不同的类型(例如 String )
  • integer=s0.getData();不编译,同上一行的原因

关于java - 关于通配符参数化类型的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10519834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com