java - Java用内部类类型扩展类
问题描述
我有以下示例代码,并在最后一行产生“类型参数不在其范围内”错误。C/D 类通过继承重用了 A/B 中的大量代码。我如何将 Y 类定义为没有错误并且仍然使用 D 类作为类型参数?有没有一种方法可以定义 D 类以使用 AB,但仍然具有 D 扩展 S 用于 Y 类的签名?
public abstract class S<E extends S<E>> extends somethingElse {}
public abstract class R<E extends S<E>> {}
public class A extends Z {
public class B extends S<B> {
}
}
public class C extends A {
public class D extends A.B {
}
}
public class X extends R<B> {} // OK
public class Y extends R<D> {} // Error: Type parameter D is not within its bound; should extends S<D>
任何帮助,将不胜感激。
解决方案
要编译它,您可以更改E extends S<E>
为E extends S<? super E>
:
public abstract class R<E extends S<? super E>> {}
这个问题的原因类似于我今天早些时候回答的另一个问题。
没有有界通配符,D
正在扩展S<B>
而不是S<D>
.
推荐阅读
- python - Pandas:营业时间滚动统计
- 3d - 如果我不知道投影的顺序,如何进行断层扫描重建
- sql - 如何在 TSQL 中按动态列排序?
- interface - Think-Cell 和 EasySlides 如何实现悬停界面?
- azure - 在 Terraform 中你能读然后写一个 json 文件吗
- java - 如何在 OSGI 声明式服务中使用 @Property 注释的基数
- javascript - React JS 自定义侧边栏导航
- python - 如何检查在 Python 中调用了哪个版本的图形 api
- automated-tests - 如何自动化使用 Django Rest 框架构建的 REST API 的 API 测试
- vue.js - 如何将我自己的翻译添加到我的 vuetify 2.x 网络应用程序中?