内部 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 还有它的 InnerPage 扩展项目 上面提到的:

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