2016-01-07 25 views
2

我有这样的班级规范名称dev.ashish.mvc.beans.Employee。 如何在运行时创建类员工以访问Employee的数据成员和成员函数。如何在java中从类规范名称创建类?

在运行时我想使用其规范名称创建类。有时,它可以是任何实体员工,客户,用户等

我尝试这样做:

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

你已经有你在entityClass类,因此调用entityClass.getClass()会给你java.lang.ClassentityClass.getClass().getDeclaredFields()确实会给你的Class不是您的特定类的方法。

您需要:

Field field [] = entityClass.getDeclaredFields(); 
0

当你这样做:

Class entityClass = Class.forName("dev.ashish.mvc.beans.Employee"); 

你刚类别的雇员。现在你有它的创建实例:

Employee employee = (Employee) entityClass.newInstance(); 

更新:

我的答案是错的。我虽然你需要使用实例的方法。但是你需要访问类方法。

+0

您的意思是说,在创建该类的实例后,必须访问该类中声明的字段?如果是,请编辑您的答案。目前还不清楚。 – Sweeper

+0

@Sweeper抱歉,我虽然需要与类的实例一起工作。但作者需要访问类的方法。我的回答是错误的。我的错。 –

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),这意味着第一个参数总是一个类实例。