gpt4 book ai didi

Java泛型类型删除

转载 作者:搜寻专家 更新时间:2023-10-30 21:19:58 25 4
gpt4 key购买 nike

想问一下java类型删除规则

如果我们有类:

public class Shape{}
public class Circle extends Shape{}


public class Base<T extends Shape>{
T x;
public void setX(T t){}
}

public class MainClass(){
public static void main(String... _arg){
Base<? extends Shape> bs = new Base<Circle>();
bs.setX(new Circle()); // <- compilation problem
}
}

你能解释一下为什么调用 setX() 方法会导致编译问题吗?

最佳答案

因为编译器不知道 new Circle已验证。考虑这段代码:

Base<? extends Shape> bs = new Base<Square>();  // Really a Base<Square> 
bs.setX(new Circle());

(仅供引用,Java tutorial on wildcards 中给出了一个非常相似的示例。)

您现在可能会惊呼“但是编译器可以看到它真的是一个 Base<Square> !”。但不是一般情况。考虑一下:

Base<? extends Shape> bs = someInterface.getBaseOfSomeKindOfShape();
bs.setX(new Circle());

关于Java泛型类型删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17597210/

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