gpt4 book ai didi

java - 为什么 Object.class 与 new Object().getClass() 不同?

转载 作者:行者123 更新时间:2023-11-30 04:42:12 26 4
gpt4 key购买 nike

我有以下 Java 类:

class Model { // some model class }

class FooModel extends Model {}

class ModelWorker {
public static <T extends Model> void do(Class<T> clazz) { /* ... */ }
}

为什么 ModelWorker.do() 方法能够用于 FooModel.class 而不能用于
new FooModel().getClass() ?

最佳答案

您的虚拟代码应该可以工作。但是,由于这显然只是一个示例,我怀疑您的真实代码有点不同。

请参阅 Object.getClass 的规范.

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.

注意它返回 Class<?> ?这意味着做类似的事情

Object o = new FooModel();
ModelWorker._do(o.getClass());

... 会正确地编译失败​​,因为 o.getClass()只是Class<?> 。你在做这样的事情吗?

关于java - 为什么 Object.class 与 new Object().getClass() 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12001307/

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