我有像 dev.ashish.mvc.beans.Employee 这样的类规范名称。 使用此方法,我可以在运行时创建Class Employee ,以便访问Employee的数据成员和成员函数。
在运行时,我想要使用其规范名称创建类。有时它可以是任何实体员工,客户,用户等。
我试过了:
Class entityClass = Class.forName("dev.ashish.mvc.beans.Employee");
上面的代码确实返回类,如果我 entityClass.getName()它确实返回 dev.ashish.mvc.beans.Employee 但是如何访问方法班级员工。
如果我使用如下的java反射:
Field field [] = entityClass.getClass().getDeclaredFields();
它返回类java.lang.Class 的声明字段,而不是 dev.ashish.mvc.beans.Employee
我怎样才能实现这个目标?
答案 0 :(得分:3)
您已经在entityClass
开设了课程,因此致电entityClass.getClass()
会给您java.lang.Class
而entityClass.getClass().getDeclaredFields()
确实会为您提供Class
的方法,而不是您的方法特别的课程。
你需要:
Field field [] = entityClass.getDeclaredFields();
答案 1 :(得分:0)
当你这样做时:
Class entityClass = Class.forName("dev.ashish.mvc.beans.Employee");
你刚刚上了员工班。现在你必须创建它的实例:
Employee employee = (Employee) entityClass.newInstance();
<强>更新强>
我的回答是错误的。我虽然你需要使用实例的方法。但是你需要访问类方法。
答案 2 :(得分:0)
您可以通过名称调用方法(添加到其他人已经说过的内容)
Method methodToCall = cls.getMethod("method_name");//cls is of type Class (e.g Employee.class)
methodToCall.invoke(obj, args);//obj is of type Employee in your case
请注意,cls的类型为Class,您必须拥有要在其上调用方法的类的实例。请注意,即使您正在调用不带参数的方法,您仍然必须传递一个类实例(本例中为obj),这意味着第一个参数始终是一个类实例。