为什么这个Java通用方法定义有警告?

前端之家收集整理的这篇文章主要介绍了为什么这个Java通用方法定义有警告?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我注意到,如果我使用泛型方法签名来完成类似于共同类型的返回类型的东西,它的工作原理就像我想,除了它会产生一个警告:
interface Car {
    <T extends Car> T getCar();
}

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

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

这个警告是什么意思?

对我来说没什么意义,Google没有提出任何有用的东西.为什么这不用作以下界面的无警告的替换(这也是免费的,因为Java允许使用类似的返回类型)?

interface Car {
    Car getCar();
}

解决方法

你已经使该方法泛型,所以调用者得到说应该返回什么类型(因为调用者可以指定type参数).这是一个很好的界面,可以在Java中正确实现,在这里你不会在执行时找到类型参数.

例如,考虑一下:

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

就界面而言,这是完全合法的,但显然不会奏效.

界面不是通用而不是方法的任何原因?那么MazdaRX8将实施Car< MazdaRX8>:

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

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

猜你在找的Java相关文章