如何在java中从类规范名创建类?

时间:2016-01-07 07:39:19

标签: java class reflection casting

我有像 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

我怎样才能实现这个目标?

3 个答案:

答案 0 :(得分:3)

您已经在entityClass开设了课程,因此致电entityClass.getClass()会给您java.lang.ClassentityClass.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),这意味着第一个参数始终是一个类实例。