knp*_*wrs 6 java generics instantiation inner-classes
所以我有以下内容:
public class Enclosing<T extends Comparable<T>> {
// non-relevant code snipped
public class Inner {
private T value;
public Inner(T t) {
value = t;
}
}
}
Run Code Online (Sandbox Code Playgroud)
一切都在汇编,世界也在快乐.但是,每当我尝试创建Enclosing.Inner如下的实例时,我都不能:
new Enclosing<Integer>.Inner(5);
Run Code Online (Sandbox Code Playgroud)
发生以下错误:
无法
Enclosing<Integer>.Inner使用参数化复合名称分配成员类型; 使用它的简单名称和封闭的类型实例Enclosing<Integer>.
重要的是要注意我不能创建内部类static,因为它包含一个类型的字段T.
我该如何解决这个问题?
Thi*_*ilo 12
要实例化内部类,必须首先实例化外部类.然后,使用以下语法在外部对象中创建内部对象:
Enclosing<Integer> outerObject = new Enclosing<Integer>();
Enclosing<Integer>.Inner innerObject = outerObject.new Inner();
Run Code Online (Sandbox Code Playgroud)
丑陋的语法暗示了这种设计中的代码味道.在Enclosing类(getInner或其他东西)中应该有某种工厂方法,如果从封闭类之外使用它,内部类可能应该实现一个公共接口.
| 归档时间: |
|
| 查看次数: |
4032 次 |
| 最近记录: |