首页 > 解决方案 > 内部类的属性具有外部类的泛型类型

问题描述

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

标签: javainner-classes

解决方案


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

推荐阅读