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映射类。它映射数据库中的数据。
答案 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());
}