1

我有以下 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()

4

1 回答 1

2

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

参见规范Object.getClass

实际结果类型是Class<? extends |X|>在哪里擦除调用|X|的表达式的静态类型。getClass

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

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

... 将无法正确编译,因为o.getClass()is 只是Class<?>. 你在做这样的事情吗?

于 2012-08-17T07:16:45.093 回答