传递Class类型的实例而不是Class所代表的类

时间:2015-06-24 07:13:39

标签: java reflection

让我们说有一个班级X.  然后,以下行返回表示X

的Class实例
Class c = X.class;

假设有一个方法foo()

public void foo(X x){.....}

是否合法
foo(c);

2 个答案:

答案 0 :(得分:2)

不,X是一种类型。 Class是另一种类型。 foo方法要求对象使用Class实例所代表的类型,而不是Class实例本身。您必须创建由Class

表示的类型的实例
Class<X> c = X.class;
X x = c.newInstance();
foo(x);

答案 1 :(得分:2)

没有。 foo需要类X的实例,但是你的c变量是类Class的实例!

尝试以这种方式思考:

foo方法想要对房子做一些事情(例如锁门或类似的东西)。你想把它给房子的蓝图而不是真正的房子!是的,房子的蓝图和房子本身密切相关,但它们并不是一回事。你不能把门锁在蓝图上,而只能锁在房子里。

同样,某些事情你只能用蓝图而不是真正的房子,例如像第一个人一样建造另一所房子。

在您的情况下,您可以使用newInstance方法尝试创建一个类型为X的新对象,或者使用Class对象的其他方法来查找和调用其他构造函数。这种类型的&#34; meta&#34;编程称为反射,您可以在此处找到更多相关信息:https://docs.oracle.com/javase/8/docs/technotes/guides/reflection/index.html