簡體   English   中英

多重嵌套的泛型類如何相互引用?

[英]How can multiply-nested generic classes refer to each other?

檢查下面的代碼

public abstract class ClassA<ClassBType extends ClassB<ClassCType>,ClassCType extends ClassC> {
    public void method(ClassBType type) {
        type.myClassA = this;  //Error.  Type mismatch: cannot convert from TestGameMain.ClassA<ClassBType,ClassCType> to TestGameMain.ClassA<TestGameMain.ClassB<ClassCType>,ClassCType>
    }
}

public abstract class ClassB<ClassCType extends ClassC> {
    ClassA<ClassB<ClassCType>,ClassCType> myClassA;

    private void testMethod() {
        myClassA.method(this);
    }
}

public abstract class ClassC {}
}

解決此問題的正確方法是什么?

編輯 :我已經更新了上面的代碼,無法編譯。

除非我確實在您的問題中缺少某些內容,否則此工作即可完成:

ClassA<ClassB<ClassCType>, ClassCType> myClassA;

我將不得不更多地了解如何實例化這些動物,以了解是否要使ClassA實例具有這些參數是需要解決的問題。

您的示例過於復雜-即使沒有ClassC您也可以演示相同的問題:

public abstract class ClassA<ClassBType extends ClassB> {
    public void method(ClassBType type) {
        type.myClassA = this; 
    }
}

public abstract class ClassB {
    ClassA<ClassB> myClassA;

    private void testMethod() {
        myClassA.method(this);
    }
}

問題歸結為差異: ClassA<ClassB>ClassA<ClassBType>之間沒有繼承關系(也不應該存在),因此無法進行賦值。 考慮到此示例的隱秘性質,我不確定這是否真的是解決您問題的“解決方案”,但是以下代碼可以編譯:

public abstract class ClassA<ClassBType extends ClassB> {
    public void method(ClassB type) {
        type.myClassA = this; 
    }
}

public abstract class ClassB {
    ClassA<? extends ClassB> myClassA;

    private void testMethod() {
        myClassA.method(this);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM