为什么这个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;
    }
}

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...