我有一个类Item,它将在以下类中用作泛型类型:
abstract class AbstractClass<I extends Item, V extends AbstractClass.Inner> {
abstract class Inner {
I item;
}
}
然后我将Abstract Class子类化为其内部页面扩展项目如上所述:
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中的项应该是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
}
}
}