以下Java方法无法编译:
<T extends Number> void foo(T t)
{
Class<? extends T> klass = t.getClass();
}
Run Code Online (Sandbox Code Playgroud)
收到的错误是:类型不匹配:无法转换Class<capture#3-of ? extends Number>为Class<? extends T>
有人可以解释为什么Class<? extends T>无效,但是没问题Class<? extends Number>吗?
Javadoc说:
实际结果类型是
Class<? extends |X|>| X | 是调用getClass的表达式的静态类型的擦除.例如,此代码片段中不需要强制转换:
Number n = 0;
Class<? extends Number> c = n.getClass();
Run Code Online (Sandbox Code Playgroud)