java - 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 异常。
我尝试了这些解决方案,但无济于事......
将getField方法更改为getDeclaredField
用 try/catch 包围代码,得到另一个错误(不兼容的类型:java.lang.String 和 java.lang.reflect.Field)
使 Android Studio 缓存无效并重新启动
我不知道如何访问这个值,欢迎任何解决方案或建议。
提前致谢。
解决方案
- 如果您在“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
}
- 如果“Person”类中的变量是静态的:
String valueString = Person.name /*The value you are looking for*/
- 如果您的变量不是静态的而是公开的:
重要(如果您没有为变量设置默认值):
在这种情况下,该值将是一个空字符串,因为您正在创建一个新的 cals 实例。您可以在 Person 类的构造函数中设置“人名”,因为变量不是静态的,所以您将获得一个空字符串。
Person _person = new Person();
String personName = _person.name;
推荐阅读
- python - 在训练中拆分数据集并设置验证。为什么会出现这个错误?
- php - 在 Symfony 4 中将路由重定向到语言前缀
- c# - intent.PutExtra 需要 Android.OS.Bundle
- ios - URLQueryItem 值是可选的
- python - 无法从 Jupyter 笔记本中的 conda 环境导入 rpy2.robjects 但在控制台中
- google-chrome - Chrome 扩展程序 - 我可以将我的扩展程序共享为 crx 文件以使用某人吗?
- image - Yocto-bitbake qt5-image - 从结果中为 rpi 创建可启动闪存时遇到问题
- amazon-web-services - AWS Application Load Balancer WebSocket 基于元数据的粘性?
- power-automate - 检查 MS Flow 表达式中的日期字段是否为空白或为空
- matlab - 将一组索引索引到矩阵