【问题标题】:How to access dynamiclly variables from another Java Class?如何从另一个 Java 类动态访问变量?
【发布时间】:2018-03-27 12:48:08
【问题描述】:

我的问题与其他人相似,但对我来说有点棘手 我有一个具有静态定义变量的 DummyData 类

  1. 公共静态字符串 Survey_1="";
  2. 公共静态字符串 Survey_2="";
  3. 公共静态字符串 Survey_3="";

所以,我称它们为 DummyData.Survey_1,它返回整个字符串值。与 DummyData.Survey_2 和 DummyData.Survey_3 类似 但问题是当我动态地调用它们时,它不会返回它们的值。 我有一个变量数据,它的值是动态变化的(data=Survey_1 or data=Survey_2 or data=Survey_3) 我使用#Reflection 来获取它的价值,但未能获得它的价值 我使用下面提到的方法来帮助我解决这个问题。

Field field = DummyData.class.getDeclaredField(data); String JsonData = field.toString();

DummyData.class.getDeclaredField("Survey_1").toString()

但是这个返回包名、类名和字符串名但不返回字符串值。 我在做什么可以帮助我吗?

【问题讨论】:

  • field.toString(); 绝对不是获取字段值的方法。看起来您已经开始阅读如何使用反射,但没有读完。
  • 听起来你需要的是一张地图
  • @VladyslavMatviienko 是的,你是对的。我刚刚开始,但我正在学习,但还没有结束,感谢您的帮助

标签: java android xml


【解决方案1】:

获取声明字段的值并不是那么简单。

您必须首先找到该字段。然后,您必须从类的实例中获取该字段。

Field f = Dummy.class.getDeclaredField(“field”);
Object o = f.get(instanceOfDummy);
String s = (String) o;

【讨论】:

    【解决方案2】:

    Field 执行简单的toString() 实际上会调用Field 对象的toString() 方法,但不会访问该值

    你必须这样做:

    Field field = SomeClass.class.getDeclaredField("someFieldName");
    String someString = (String) field.get(null); // Since the field is static you don't need any instance
    

    另外,请注意使用反射是 expensivedangerous 操作。你应该考虑重新设计你的系统

    【讨论】:

    • 你能解释一下“反射”是多么昂贵和危险的操作吗?
    猜你喜欢
    • 1970-01-01
    • 2012-05-04
    • 2013-10-25
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多