内部类的属性具有外部类的泛型类型

时间:2019-04-03 21:09:01

标签: java inner-classes

我有一个类 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 中具有该方法。是因为我想念什么吗?

1 个答案:

答案 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
        }
    }
}