嵌套通配符泛型变量影响
Nested wildcard generics variable affectation
给定以下 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
class 的主要方法中,接收 f.construct()
结果的变量的正确类型是什么?
这种类型应该类似于 A<B<...>>
,其中 ...
是我正在寻找的。
上面有3行注释代码代表我尝试解决这个问题。
第一行和第二行无效。
第三个是,但我丢失了 B
类型信息,我必须转换 a.getT()
.
A<? extends B<?>> a = f.construct();
是正确的语法,如 Paul Boddington 所述。
给定以下 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
class 的主要方法中,接收 f.construct()
结果的变量的正确类型是什么?
这种类型应该类似于 A<B<...>>
,其中 ...
是我正在寻找的。
上面有3行注释代码代表我尝试解决这个问题。
第一行和第二行无效。
第三个是,但我丢失了 B
类型信息,我必须转换 a.getT()
.
A<? extends B<?>> a = f.construct();
是正确的语法,如 Paul Boddington 所述。