[英]Creating instances of public inner classes of generic classes
所以我有以下内容:
public class Enclosing<T extends Comparable<T>> {
// non-relevant code snipped
public class Inner {
private T value;
public Inner(T t) {
value = t;
}
}
}
一切都在汇编,世界也在快乐。 但是,每当我尝试按如下方式创建Enclosing.Inner
的实例时,我都不能:
new Enclosing<Integer>.Inner(5);
发生以下错误:
无法使用参数化复合名称分配成员类型
Enclosing<Integer>.Inner
; 使用其简单名称和Enclosing<Integer>
类型的封闭实例。
重要的是要注意我不能使内部类static
,因为它包含T
类型的字段。
我该如何解决这个问题?
要实例化内部类 ,必须首先实例化外部类。 然后,使用以下语法在外部对象中创建内部对象:
Enclosing<Integer> outerObject = new Enclosing<Integer>();
Enclosing<Integer>.Inner innerObject = outerObject.new Inner();
丑陋的语法暗示了这种设计中的代码味道。 在getInner
类( getInner
或者其他)中可能应该有某种工厂方法,如果从其封闭类之外使用它,内部类可能应该实现一个公共接口。
刚遇到同样的问题,在java7中解决了以下问题
public class Test {
static class A<T> {
public class B {
}
}
A<String> a = new A();
class C extends A.B {
C() {
Test.this.a.super();
}
}
public void test() {
C c = new C();
A.B b = this.a.new B();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.