获得课程的领域

时间:2012-03-30 05:46:56

标签: java hibernate reflection

Field[] fields = <class name>.getClass().getDecdlaredFields();
for(Field field: fields) {
     String fieldName = field.getName();
     log.info(" Fieldname : "+ fieldName);
}

这给了我带有随机字符的构造函数的名称:

CGLIB$getPTI$25
CGLIB$setPTI$26

这里的类实际上是一个hibernate映射类。它映射数据库中的数据。

2 个答案:

答案 0 :(得分:3)

他们不是随机字符。它们是有关类所声明的字段,可能是自动生成的。在机器生成的代码中使用$是很常见的(甚至受到JLS的鼓励)。

请注意,CGLIB是一个代码生成库,可能就是在这里创建类的。

现在,如果你认为你正在查看你的类之一,那么你就不是了 - 你正在查看Hibernate动态创建的子类。打印foo.getClass().getName()即可查看。如果您正在尝试查找 类中声明的字段,则需要沿着继承层次结构向上走,直到到达您的班级。 (看看生成的类是什么样的,看看如何检测到你真正的类。)

答案 1 :(得分:0)

这会对你有帮助....

String className = your_class_name;
Class<?> objectClass = Class.forName(className);    
Field [] fieldsObjs = objectClass.getDeclaredFields();

for(int i=0;i<fieldsObjs.length;i++){
      system.out.println("className : " + fieldsObjs[i].getName());
}