[英]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.