给出以下Java代码:
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();
}
}
在Test
类的主要方法中,接收f.construct()
结果的变量的正确类型是什么?
此类型应类似于A<B<...>>
,其中...
正是我正在寻找的。 p>
上面有3行注释代码,代表我尝试解决这个问题。
第一行和第二行无效。
第三个是但我放弃了B
类型信息,我必须投射a.getT()
。
答案 0 :(得分:1)
A<? extends B<?>> a = f.construct();
是正确的语法。