java—使用< ?>的方法,如果定义为< ?扩展b>?

js81xvg6  于 2021-06-26  发布在  Java
关注(0)|答案(0)|浏览(133)

我习惯于java泛型,例如。

class B {}
class A<T extends B> {
  T t;
  T getT() {
    return t;
  }
}

下面这段代码在这种情况下到底是什么意思?

class C {
  A<?> a;
  A<?> getA() {
    return a;
  }
}

代码可以编译,但我想知道为什么使用 A<?> ? 我希望编译器会抱怨 A 必须以相同的方式在属性级别上使用( a1 )或者在班级里( a2 ):

class C<T extends B> {
   A<? extends B> a1;
   A<? extends B> getA1() {
     return a1;
   };

  A<T> a2;
  A<T> getA2() {
    return a2;
  }
 }

我猜是这样的 A<?> 只是句法上的糖分,但意思等于 A<? extends B> ? 然而,许多关于堆栈溢出的答案都是关于表示法的 Something<?> 手段 Something<? extends Object> 这就意味着所有这些答案都是错误的?
但不可能指定 A<?> 将变量类型化为 A<? extends B> ,这表明编译器不知道不可能创建 A<X> 哪里 X 不是的子类 B .
理论上 A<?> 只是表示未知的类型参数,但是编译器仍然应该知道,由于a的类型参数定义,类型参数必须是b的子类。但编译器似乎没有考虑到这一点?为什么?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题