为什么这个Java通用方法定义有警告?
发布时间:2020-12-14 16:36:08 所属栏目:Java 来源:网络整理
导读:我注意到,如果我使用泛型方法签名来完成类似于共同类型的返回类型的东西,它的工作原理就像我想,除了它会产生一个警告: interface Car { T extends Car T getCar();}class MazdaRX8 implements Car { public MazdaRX8 getCar() { // "Unchecked overriding"
我注意到,如果我使用泛型方法签名来完成类似于共同类型的返回类型的东西,它的工作原理就像我想,除了它会产生一个警告:
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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |