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

问题描述 投票:0回答:1

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

java inner-classes
1个回答
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
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.