让我们说有一个班级X. 然后,以下行返回表示X
的Class实例Class c = X.class;
假设有一个方法foo()
public void foo(X x){.....}
做
是否合法foo(c);
答案 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