interface A<T> {
interface B {
// Results in non-static type variable T cannot
// be referenced from a static context
T foo();
}
}
これはどうしてですか? A.Bから参照されるとき、Tはなぜ静的であると見なされますか?Javaジェネリックス:非静的型変数Tは静的コンテキストから参照できません
interface A<T> {
interface B {
// Results in non-static type variable T cannot
// be referenced from a static context
T foo();
}
}
これはどうしてですか? A.Bから参照されるとき、Tはなぜ静的であると見なされますか?Javaジェネリックス:非静的型変数Tは静的コンテキストから参照できません
インターフェイスのすべてのメンバーフィールドは、デフォルトではpublic
,static
およびfinal
です。
デフォルトでは、内部インターフェイスはstatic
なので、静的フィールドまたはメソッドからT
を参照することはできません。
それはそれは何の意味このような何かについて
ありがとう、それは質問の最初の部分に答えます。どのようにして、内部インタフェースに見られるタイプTを、それを含むインタフェースのタイプと同じタイプにするか? – auser
最初の文は不要で誤解を招くので削除します - はいインターフェースフィールドは暗黙のうちに 'public static final'ですが、これは暗黙的に' public abstract'であるインターフェース*メソッド*と関係があります。内部インターフェースが暗黙的に '静的'であるという事実が重要です。 –
内部インターフェイスが内部フィールドと同じです –
どのようにすることはないだろうクラスに関連付けられている静的フィールドまたはメソッドに関連付けられていた場合T
は、実際には、クラスのインスタンスに関連付けられているため。
public interface A<T> {
interface B<T> extends A<T>{
T foo();
}
}
@BheshGurungはい - 意図的です。 – auser
related:http://stackoverflow.com/a/74400/697449 –