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