首页 > 解决方案 > Android Java,如何获取类属性的值?

问题描述

我想获得一个类属性的值,但我得到了异常:java.lang.NoSuchFieldException

人物类

public class Person {

    public static final String name = "person name";

}

MainActivity.class

...

private void method() {

    Class myClass = Person.class;

    String name = myClass.getField("name");

}

...

我收到 getField 方法的 java.lang.NoSuchFieldException 异常。

我尝试了这些解决方案,但无济于事......

  1. 将getField方法更改为getDeclaredField

  2. 用 try/catch 包围代码,得到另一个错误(不兼容的类型:java.lang.String 和 java.lang.reflect.Field)

  3. 使 Android Studio 缓存无效并重新启动

我不知道如何访问这个值,欢迎任何解决方案或建议。

提前致谢。

标签: javaclassclass-attributes

解决方案


  1. 如果您在“Person”类中的变量是静态的:(
    在我看来,这不是最好的解决方案)

    说明:getField 方法返回一个类型“字段”,因此您不能在没有转换的情况下将另一种类型的变量保存到变量中。
    YourField.get 返回一个对象,因此您不能在没有转换的情况下将另一种类型的变量保存到变量中。

try{
    Class _person = Person.class;
    Field field = _person.getField("name");
    Object value = field.get(null);
    String valueString = (String)value; /*The String you are looking for*/
}catch (Exception e) {
    //TODO handle exception
}

  1. 如果“Person”类中的变量是静态的:

    String valueString = Person.name /*The value you are looking for*/

  1. 如果您的变量不是静态的而是公开的:
    重要(如果您没有为变量设置默认值):
    在这种情况下,该值将是一个空字符串,因为您正在创建一个新的 cals 实例。您可以在 Person 类的构造函数中设置“人名”,因为变量不是静态的,所以您将获得一个空字符串。

    Person _person = new Person();
    String personName = _person.name;


推荐阅读