在Java中我试图使用反射来迭代声明的字段,这样我就可以得到注释,以及字段本身的基础值:
for(Field field : CustomObject.getClass().getDeclaredFields()) {
field.setAccessible(true);
Object value = field.get(CustomObject);
CustomAnnotation annotation = field.getAnnotation(CustomAnnotation.class);
if (annotation != null) {
//do stuff with annotation and object's value for this field
}
}
在这种情况下,该字段可能是私有的,这意味着我无法直接使用field.get()
访问它,除非我首先将其设置为可访问。
这是不好的做法吗?虽然它似乎有效但我不禁觉得这违反了一些关键的OOP原则。
完成后我是否必须将setAccessible
变为false
?
是否有更好的方法通过某种方式调用其getter来访问对象的基础值?