该方法的文档getClass()中Object说:
实际结果的类型是
Class<? extends |X|>其中|X|是静态类型在其上的getClass称为表达的擦除.
那么为什么foo编译但不是bar?
static void foo(String s) {
try {
Class<? extends String> clazz = s.getClass();
} catch (Exception e) {
}
}
static <T> void bar(T t) {
try {
Class<? extends T> clazz = t.getClass();
} catch (Exception e) {
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
我接受了yshavit的答案,因为它清楚地回答了我的问题,但我仍然很想知道他们为什么这样定义它.他们可以将它定义为具有类型Class<? extends T>,其中T是静态类型的表达式.我不清楚为什么在这个阶段删除类型信息是必要的.如果类型是有意义的List<String>,但不是如果它是T.我会向任何解释这个问题的答案进行投票.
| 归档时间: |
|
| 查看次数: |
651 次 |
| 最近记录: |