[英]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.