gpt4 book ai didi

java - getClass 方法的返回类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:22:37 24 4
gpt4 key购买 nike

方法的文档 getClass()Object说:

The actual result type is Class<? extends |X|> where |X| is the erasure of the static type of the expression on which getClass is called.

那么为什么 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) {

}
}

编辑

我接受了 yshavit 的回答,因为它清楚地回答了我的问题,但我仍然很想知道他们为什么这样定义它。他们可以将其定义为类型 Class<? extends T>其中 T是表达式的静态类型。我不清楚为什么有必要在这个阶段删除类型信息。如果类型是 List<String> 才有意义, 但如果是 T 则不是.我会投票支持解释这一点的任何答案。

最佳答案

where |X| is the erasure of the static type of the expression (emphasis added)

erasureT tObject , 所以 |X|Object在这种情况下。这意味着结果类型是 Class<? extends Object> (本质上等同于 Class<?> )。

删除String s ,另一方面,是 String (因为 String 是一个 reifiable 类型——即,不是通用的)。

关于java - getClass 方法的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29189763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com