内部クラスで宣言された型変数の囲みとして囲むクラスで宣言された型変数を使用する方法はありますか?内部クラスの型パラメータを囲むクラス型変数でバインド
class Test<E> {
class Inner<T extends E> {}
<T extends E> void doStuff(T arg) {}
public static void main(String[] args) {
new Test<Number>().doStuff(new Integer(0)); // works fine, as expected
new Test<Number>().new Inner<Integer>(); // won't compile
}
}
javacは、このエラーを与える:
Test.java:6: type parameter java.lang.Integer is not within its bound
new Test<Number>().new Inner<Integer>();
^
私はコンパイラを満足させるタイプの任意の組み合わせを見つけることができません。 Inner
と入力したT
とdoStuff
との違いは何ですか?なぜ、1つは動作し、もう1つは動作しませんか?
私は代わりの方法を探していません。言語の仕組みをよりよく理解したいと思っています。
この例はコンパイルされ、私のために書かれたとおりに正常に動作します。 – ILMTitan
@ILMTitanどのコンパイラを使用していますか? – gdejohn
はjavac 1.6.0_21で失敗します。 – axtavt