在 Java 中访问对象的字段值 - 无法访问类 java.lang.IllegalAccessException 的成员

丹尼尔·马腾森

我正在尝试使用泛型来访问对象的字段。

例如,如果我有一个对象,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;
}

问题:

如何使用泛型从任意类中获取所有值?

luk2302

该字段可能无法访问,您可以通过查看并更改它
field.isAccessible()

field.setAccessible(true)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java堆被无法访问的对象淹没

如何从Java中的嵌套类访问父类成员?

Java类成员的访问级别

“无法访问java.lang”-Netbeans 6.9.1中的错误

java.lang.IllegalAccessException:与类的公共/私有属性有关吗?

java.lang.IllegalAccessError:无法访问类,因为模块不会导出到未命名的模块

java.lang.IllegalAccessException:无法访问带有修饰符“ public”的类java.util.Collections $ UnmodifiableCollection的成员

Scala访问继承了Java类的静态成员

无法访问Java子类方法中抽象类对象的属性

IllegalAccessException:类org.apache.camel.component.bean.MethodInfo无法访问带有修饰符“ public”的类的成员

java.lang.RuntimeException:无法注入成员

java.lang.IllegalAccessException-无法使用修饰符“”访问类org.springframework.data.jpa.util.HibernateProxyDetector的成员

Kotlin:IllegalAccessException:类BlockJUnit4ClassRunner无法使用修饰符“ private”访问Foo类的成员

java:“无法访问jarfile ...”

无法访问类的向量成员

无法访问Clojure中的Java字段

java nashorn访问超类成员

Unity-Android 6.0-java.lang.IllegalAccessException崩溃:无法访问java.lang.Class <com.unity3d.player.n $ 1>

错误:无法访问java.lang.Object

Java:无法访问方法

Java android访问外部类中内部类的成员字段

FirebaseInstanceId.zzju(java.lang.String)'无法访问

java.lang.RuntimeException:IllegalAccessException

在 kotlin 中访问父 Java 类的(静态类)成员

JAVA:如何访问每个类的成员?

无法从 kotlin 外部继承的 Java 类访问成员

无法访问 Java 库

java.lang.IllegalAccessError: 类 lombok.javac.apt.LombokProcessor 无法访问类 com.sun.tools.javac.processing.JavacProcessingEnvironment

Java 模块真的无法访问类路径吗?