java - 内部类的属性具有外部类的泛型类型
问题描述
我有一个类Item将用作以下类中的泛型类型:
abstract class AbstractClass<I extends Item, V extends AbstractClass.Inner> {
abstract class Inner {
I item;
}
}
然后我将AbstractClass子类化,并将它的Inner子类化为上面提到的Page扩展Item :
class ImpClass extends AbstractClass<Page, ImpClass.Inner> {
class Inner extends AbstractClass.Inner {
void method(){
// Setup item
// Printout class of item, which is Page
item.callMethodOfPage(); // won't compile without conversion to Page
}
}
}
从理论上讲, ImpClass.Inner中的item应该是Page并且只有在Page中具有方法。是因为我错过了什么吗?
解决方案
AbstractClass.Inner
是原始类型。您需要参数化AbstractClass
:
abstract class AbstractClass<I extends Item, V extends AbstractClass<I, V>.Inner> {
abstract class Inner {
I item;
}
}
class ImpClass extends AbstractClass<Page, ImpClass.Inner> {
abstract class Inner extends AbstractClass<Page, Inner>.Inner {
void method(){
// Setup item
// Printout class of item, which is Page
item.callMethodOfPage(); // compiles
}
}
}
推荐阅读
- r - 运行代码创建表和下载表
- javascript - 无法读取未定义的属性“长度”。”
- azure-data-lake - 基于温度的数据湖
- python - 如何使用另一个数据框获取数据框?
- javascript - React:切换另一个组件中的内容
- python - 在python中计算单词相似度得分
- java - ArrayList 在 for 循环中调用方法时被覆盖,并且方法执行 firebase 调用
- php - 事件不起作用 laravel,在队列中,进程正在进行中并给出错误
- typescript - 如何组合通过 API 中的 get 函数检索到的二进制 (PDF-) 文件块
- hangouts-chat - 带 out bot 的 Google Hangout 聊天数据