覆盖java中的列表结果类型
发布时间:2020-12-15 05:05:05 所属栏目:Java 来源:网络整理
导读:我想在 java中编译这个代码的一些变体. class X{ ListX getvalue(){...};}class Y extends X{ ListY getvalue(){...};} Javac(1.6)返回错误,因为List Y和列表 X不兼容. 关键是我想要编译器 识别List Y是一个兼容的回报 输入列表 X如果Y是X的子类型. 我想要的
我想在
java中编译这个代码的一些变体.
class X { List<X> getvalue(){...}; } class Y extends X { List<Y> getvalue(){...}; } Javac(1.6)返回错误,因为List< Y>和列表< X>不兼容. 关键是我想要编译器 注意:这个问题有点像 解决方法
在Java中,重写方法的返回类型必须与被覆盖的方法的返回类型协变.
类java.util.List不是协变的(实际上,没有Java类.这是因为缺少声明 – 站点方差注释).换句话说,B<:A并不意味着List< B>. <:List< A> (读< ;: as as-subtype-of).因此,您的代码不会进行类型检查. 在Java中,您有定义 – 站点差异.因此,以下是typechecks: import java.util.List; class X { List<? extends X> getvalue() { return null; } } class Y extends X { List<Y> getvalue() { return null; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |