1
次のJavaコードを考える:Test
クラスのmainメソッドでネストされたワイルドカードのジェネリック変数気取り
public class Test {
public static class A<T> {
private T t;
public A(T t) {
this.t = t;
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
public static class B<T> {
private T t;
public B(T t) {
this.t = t;
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
public static class F<T> {
private T t;
public F(T t) {
this.t = t;
}
public A<B<T>> construct() {
return new A<>(new B<>(t));
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
public static void main(String[] args) {
F<?> f = new F<>(0);
// 1: KO
// A<B<?>> a = f.construct();
// 2: KO
// A<B<Object>> a = f.construct();
// 3: OK
// A<?> a = f.construct();
}
}
を、の結果を受け取る変数の正しい種類は何ですか? このタイプはA<B<...>>
のようになります。...
は私が探しているものです。
上記の3つのコメント行が、この問題を解決しようとしています。 1行目と2行目が無効です。 3番目はB
タイプの情報ですが、私はキャストする必要があります。a.getT()
です。
なぜ、 'F f = new F <>(0);' –
Tunaki
の代わりに 'F > f = new F <>(0);'を使用していますか? 'F'のインスタンスに影響されました。 –
引数として0を渡しています。これは 'int'です。 – Tunaki