内部 class 的 属性 具有外部 class 的通用类型
Inner class's property having outer class's generic type
我有一个 class Item 将在以下 class:
中用作通用类型
abstract class AbstractClass<I extends Item, V extends AbstractClass.Inner> {
abstract class Inner {
I item;
}
}
然后我子class AbstractClass 还有它的 Inner 和 Page 扩展项目 上面提到的:
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
}
}
}
我有一个 class Item 将在以下 class:
中用作通用类型abstract class AbstractClass<I extends Item, V extends AbstractClass.Inner> {
abstract class Inner {
I item;
}
}
然后我子class AbstractClass 还有它的 Inner 和 Page 扩展项目 上面提到的:
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
}
}
}