【发布时间】:2021-10-28 05:23:52
【问题描述】:
考虑以下代码:
import java.math.BigDecimal;
class Scratch {
public static class Test<N extends Number> {
public void foo(Class<N> numberClass) {
System.out.println(numberClass);
}
public void bar() {
foo(BigDecimal.class);
}
}
public static void main(String[] args) {
Test<Number> t = new Test<>();
t.bar();
}
}
这无法在第 12 行(对 foo() 的调用)与 incompatible types: java.lang.Class<java.math.BigDecimal> cannot be converted to java.lang.Class<N> 进行编译。我不明白,因为通用N 扩展了Number,所以我应该能够将BigDecimal.class 传递给采用Class<N> 参数的方法。 TIA 有什么想法!
【问题讨论】:
-
Class<? extends Number>表示Number的任何子类。Class<N>表示Number的特定 类型,用N表示,在Test内部是不可知的,因为type erasure。 -
Java 在这件事上有点落后。