gpt4 book ai didi

java - 为什么这个 Java 泛型方法定义有警告?

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

我注意到如果我在方法签名上使用泛型来完成类似于协变返回类型的事情,它会像我想的那样工作,除了它会生成警告:

interface Car {
<T extends Car> T getCar();
}

class MazdaRX8 implements Car {
public MazdaRX8 getCar() { // "Unchecked overriding" warning
return this;
}
}

使用上面的代码,我的 IDE 发出警告:“未经检查的覆盖:返回类型需要未经检查的转换。找到:'MazdaRX8',需要'T'”

这个警告是什么意思?

这对我来说意义不大,Google 也没有提供任何有用的信息。为什么这不能作为以下接口(interface)的无警告替代品(这也是无警告的,因为 Java 允许协变返回类型)?

interface Car {
Car getCar();
}

最佳答案

您已经使该方法成为通用方法,因此调用者 可以说出应该返回什么类型(因为调用者可以指定类型参数)。这是一个很难在 Java 中正确实现的接口(interface),您无法在执行时找出类型参数。

例如,考虑一下:

Car mazda = new MazdaRX8();        
FordGalaxy galaxy = mazda.<FordGalaxy>getCar();

就接口(interface)而言,这是完全合法的……但显然行不通。

为什么接口(interface)不是通用的而不是方法?那么MazdaRX8会实现Car<MazdaRX8> :

interface Car<T extends Car> {
T getCar();
}

class MazdaRX8 implements Car<MazdaRX8 > {
public MazdaRX8 getCar() {
return this;
}
}

关于java - 为什么这个 Java 泛型方法定义有警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4309229/

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