繁体   English   中英

具有实例变量的泛型内部类,该实例变量是另一个泛型内部类的对象

[英]Generic inner class with instance variable that is an object of another generic inner class

首先,我意识到我可以使ProblemClass成为非泛型类,并且不会收到编译器错误。 我想知道这个错误是什么意思。 我的代码非常简单,一个带有两个私有内部类的泛型类。 外部类具有InnerClass<E>类型的实例变量,内部类ProblemClass<E>也具有InnerClass<E>类型的实例变量。 实例化ProblemClass时,所有操作都设置为o = a ,其中o,a分别是外部类和内部类的实例变量。

public class SuperClass<E> {

    private class InnerClass<E> {
    }

    private class ProblemClass<E> {
        private InnerClass<E> o;

        public ProblemClass() {
            o = a;
        }
    }

    private InnerClass<E> a;
}

我收到以下错误。

SuperClass.java:11: error: incompatible types
            o = a;
                ^
  required: SuperClass<E#1>.InnerClass<E#2>
  found:    SuperClass<E#1>.InnerClass<E#1>
  where E#1,E#2 are type-variables:
    E#1 extends Object declared in class SuperClass
    E#2 extends Object declared in class SuperClass.ProblemClass
1 error

我的问题是,此错误是什么意思?

很简单的EProblemClassEInnerClass都没有关系-你的代码就相当于

public class SuperClass<E> {

    private class InnerClass<F> {
    }

    private class ProblemClass<G> {
        private InnerClass<G> o;

        public ProblemClass() {
            o = a;
        }
    }

    private InnerClass<E> a;
}

并且您可以清楚地看到ao不一定兼容。

当错误试图告诉您时,您有两个不同的E ,它们可能是两种不同的类型。

如果创建new OuterClass<Integer>.ProblemClass<String>()会发生什么?

@IanRoberts有答案,您的某些E并不相同。

这是代码的固定版本:

public class SuperClass<SE> {

  private class InnerClass<IE> {
  }

  private class ProblemClass<PE> {
    private InnerClass<SE> o;

    public ProblemClass() {
      o = a;
    }

  }

  private InnerClass<SE> a;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM