Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Object.class与new Object().getClass()不同?_Java_Generics_Reflection - Fatal编程技术网

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

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){/*…*/

我有以下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){/*…*/}
}
为什么
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来自哪里?