簡體   English   中英

在封閉類的超類型聲明中使用嵌套類型作為泛型類型參數

[英]Using a nested type as a generic type argument in the enclosing class' supertype declaration

我基本上有一個問題,為什么以下不起作用。 我有一個抽象類:

public abstract class Abstrct <T> {

}

然后我定義了一個類,該類使用了一個定義了公共內部類的類,我想將它用於泛型參數,如下所示:

public class Outer extends Abstrct<Inner> {
    public class Inner {

    }
}

當我正在學習Java時,我更感興趣的是它為什么不起作用。 與其如何使其工作無關,但我也會對此感興趣。

Inner不在Outer的類聲明范圍內。 extends子句中使用時,它不是已知的類型名稱。 使用合格的參考:

class Outer extends Abstract<Outer.Inner>

或者導入它:

import com.example.Outer.Inner;

從規范,關於范圍

的成員的聲明的范圍m中聲明或由類繼承的類型C (§8.1.6) 是整個身體C ,包括任何嵌套類型聲明。

extends子句是類的Superclass聲明的一部分,如規范中所述。 它不是班級機構的一部分。

但是, import語句中使用的類型的范圍,

[..] 是出現導入聲明的編譯單元中的所有類和接口類型聲明(第7.6節),以及編譯單元的包聲明(如果有)的任何注釋。

您可以使用Abstrct<Outer.Inner>使類型明確且有效。

您必須明確,因為您定義的內部類不是靜態的,因此它只存在於包含類的范圍內。 (參見https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

在你的情況下嘗試以下:

public class Outer extends Abstrct<Outer.Inner> {
    public class Inner {

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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