gpt4 book ai didi

JAVA 通配符函数问题

转载 作者:行者123 更新时间:2023-11-30 05:28:52 25 4
gpt4 key购买 nike

这是代码

class TwoD {
int x, y;
public TwoD(int x, int y) {
super();
this.x = x;
this.y = y;
}
}


class ThreeD extends TwoD {
int z;
public ThreeD(int x, int y, int z) {
super(x, y);
this.z = z;
}
}


class FourD extends ThreeD {
int t;
public FourD(int x, int y, int z, int t) {
super(x, y, z);
this.t = t;
}
}



class coords<T extends TwoD> {
T cordinates;
public coords(T cordinates) {
super();
this.cordinates = cordinates;
}
static void show(coords<? super ThreeD> c) {}
}


public class mainX {
public static void main(String a[]) {
FourD fourD = new FourD(1, 2,3,4);
coords check = new coords(fourD);
coords.show(check);

TwoD twoD = new TwoD(1, 2);
coords check1 = new coords(twoD);
coords.show(check1);

// How this program runs fine with the child and parent subclass objects in show method?

}
}

方法

静态无效显示(坐标c)

应该只允许父类对象?为什么它也允许子类对象?该程序如何在 show 方法中与子类和父类子类对象一起正常运行?

我很困惑!

最佳答案

mentioned by @Thomas in the comments ,您正在使用 raw types为您coords 。 (我可以详细说明,但链接的答案非常清楚地解释了所有内容。您的用例主要在 原始类型与使用 <?> 作为类型参数有何不同? 部分提到>原始类型是该类型的删除。)

如果你想改变:

coords check = new coords(fourD);
...
coords check1 = new coords(twoD);

致:

coords<FourD> check = new coords<>(fourD);
...
coords<TwoD> check1 = new coords<>(twoD);

您会得到预期的错误:

error: incompatible types: coords<TwoD> cannot be converted to coords<? extends ThreeD>
coords.show(check1);
^

PS/题外话:类(class)coords应该大写C (因此 Coords )当遵循 Java 代码标准时。

关于JAVA 通配符函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57993041/

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