代码之家  ›  专栏  ›  技术社区  ›  Ed Marty

多个嵌套的泛型类如何相互引用?

  •  0
  • Ed Marty  · 技术社区  · 15 年前

    检查下面的代码

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

    解决这个问题的正确方法是什么?

    编辑 :我已经更新了上面的代码,但没有编译。

    2 回复  |  直到 15 年前
        1
  •  1
  •   kvb    15 年前

    您的示例过于复杂-即使没有 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> 和A 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);
        }
    }
    
        2
  •  5
  •   Yishai    15 年前

    除非我真的在你的问题上遗漏了什么,否则这就是工作:

    ClassA<ClassB<ClassCType>, ClassCType> myClassA;
    

    我必须了解更多关于如何实例化这些动物的信息,以了解获取ClassA实例以获得这些参数是否是需要解决的问题。

    推荐文章