[英]Casting an object to a generic (or storing inner class variable as generic)
[英]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
我的问题是,此错误是什么意思?
很简单的E
的ProblemClass
和E
的InnerClass
都没有关系-你的代码就相当于
public class SuperClass<E> {
private class InnerClass<F> {
}
private class ProblemClass<G> {
private InnerClass<G> o;
public ProblemClass() {
o = a;
}
}
private InnerClass<E> a;
}
并且您可以清楚地看到a
和o
不一定兼容。
当错误试图告诉您时,您有两个不同的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.