簡體   English   中英

創建泛型類的公共內部類的實例

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM