我正在尝试使用泛型来访问对象的字段。
例如,如果我有一个对象,myObject
并且我知道它的大部分字段都是数据类型float
。所以当我调用这个函数时getFieldValuesFloat(myObject, new String[]{"id"});
然后我得到了这个错误:
java.lang.IllegalAccessException: class se.danielmartensson.tools.GetClassInformation cannot access a member of class se.danielmartensson.entities.LX_Current with modifiers "private"
这是我遇到问题的代码:
public static <T> Float[] getFieldValuesFloat(T object, String[] avoidTheseFields) {
String[] fieldNames = getFieldNames(object, avoidTheseFields);
Float[] fieldValues = new Float[fieldNames.length];
int i = 0;
for(String fieldName : fieldNames) {
try {
Field field = object.getClass().getDeclaredField(fieldName);
fieldValues[i] = field.getFloat(object);
i++;
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return fieldValues;
}
以及关注此代码行的错误:
fieldValues[i] = field.getFloat(object);
这很奇怪,因为我正在使用这种方法来获取字段名称。这个方法有效。它还使用泛型,但相反,我仅从对象中读取字段名称。
public static <T> String[] getFieldNames(T object, String[] avoidTheseFields) {
Field[] fields = object.getClass().getDeclaredFields();
String[] fieldNames = new String[fields.length - avoidTheseFields.length];
List<String> avoidTheseNamesList = Arrays.asList(avoidTheseFields);
int i = 0;
for(Field field : fields) {
String fieldName = field.getName();
if(avoidTheseNamesList.contains(fieldName))
continue;
fieldNames[i] = fieldName;
i++;
}
return fieldNames;
}
问题:
如何使用泛型从任意类中获取所有值?
该字段可能无法访问,您可以通过查看并更改它
field.isAccessible()
field.setAccessible(true)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句