Java 为什么Object.class与new Object().getClass()不同?
我有以下Java类:Java 为什么Object.class与new Object().getClass()不同?,java,generics,reflection,Java,Generics,Reflection,我有以下Java类: class Model { // some model class } class FooModel extends Model {} class ModelWorker { public static <T extends Model> void do(Class<T> clazz) { /* ... */ } } 类模型{//一些模型类} 类FooModel扩展了模型{} 类模型工人{ 公共静态void do(类clazz){/*…*/
class Model { // some model class }
class FooModel extends Model {}
class ModelWorker {
public static <T extends Model> void do(Class<T> clazz) { /* ... */ }
}
类模型{//一些模型类}
类FooModel扩展了模型{}
类模型工人{
公共静态void do(类clazz){/*…*/}
}
为什么ModelWorker.do()
方法可以用于FooModel.class
而不能用于newfoomodel().getClass()
?您的伪代码应该可以工作。然而,由于这显然只是一个示例,我怀疑您的真实代码有点不同
有关详细信息,请参见规范
实际结果类型是类
?这意味着
Object o = new FooModel();
ModelWorker._do(o.getClass());
。。。将无法正确编译,因为
o.getClass()
仅仅是Class
。你在做这样的事情吗?do
不是一个合法的标识符。你说的“不能”是什么意思?这个问题需要澄清。(假设do()被重命名。)如这里所述do(FooModel.class)
和do(newfoomodel().getClass())
都可以正常工作。那么问题出在哪里呢?对我来说,我删除了do()签名之外的类型提示…@Hannes这是否意味着您使用的是原始类型?或者你是否接受Class
而T
未绑定?不,更像是公共静态voiddo(Class clazz){/*…/}而不是公共静态voiddo(Class clazz){/..*/}。如果你只有静态voiddo(Class clazz)
那么T来自哪里?