我想从多个类中使用以下泛型函数。问题是,如果我从帮助器类调用它,由于可见性,我无法获取字段对象。
public <T> List<T> descendingServices(Class<T> cls) {
List<T> descendings = new ArrayList<>();
for (Field field : EnvironmentServiceImpl.class.getDeclaredFields()) {
Object obj;
try {
obj = field.get(this);
if (cls.isInstance(obj)) {
T descending = (T) obj;
descendings.add(descending);
}
} catch (IllegalAccessException e) {
}
}
return descendings;
}
我可以在不使用setAccessible
字段的情况下以某种方式解决此问题吗?
答案 0 :(得分:1)
如果您没有先使用反射,那么解决方案就是考虑如何访问该字段。然后,您可以在弄清楚如何访问数据后添加反射代码。
如果你不能访问该字段,因为它不是public
,那么声明该字段的类应该声明一个public
getter方法,为你访问该字段,为自己提供封装。 / p>
如有必要,将getter方法添加到类中。然后拨打Class
的{{1}}方法,而不是getMethods
。您可能需要绕过其他不想处理的方法。
返回一个包含
getDeclaredFields
个对象的数组,这些对象反映了此Method
对象所表示的类或接口的所有公共方法,包括由类或接口声明的那些以及从超类和超接口继承的那些。 / p>