是field.setAccessible(true)不好的做法?

时间:2016-08-15 02:05:24

标签: java reflection annotations private getter

在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()访问它,除非我首先将其设置为可访问。

  1. 这是不好的做法吗?虽然它似乎有效但我不禁觉得这违反了一些关键的OOP原则。

  2. 完成后我是否必须将setAccessible变为false

  3. 是否有更好的方法通过某种方式调用其getter来访问对象的基础值?

0 个答案:

没有答案