我有一个类 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 中具有该方法。是因为我想念什么吗?
答案 0 :(得分:2)
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
}
}
}