当前位置: 首页 > 知识库问答 >
问题:

Java反射-通过传递名称获得类变量

杨彦君
2023-03-14

我有一个类(在我的项目中是一个单例),带有一些变量。我想通过在函数中传递变量的名称来获得其中的一个变量。现在我有:

public final class Configuration {
   private static volatile Configuration instance = null;
   //Here usual code to instanciate singleton

   String var1;
   int var2;
   boolean var3;

   public static Object Get(String varname)throws IllegalArgumentException, IllegalAccessException {
       for(Field field : instance.getClass().getFields())
            if(field.getName() == varname) 
                return field.get(field);
       return null;
   }

}

共有1个答案

东方旺
2023-03-14

此外,您的字符串比较错误(您应该使用.equals,而不是==,尽管==通常会起作用。)表达式field.get(field)也有问题。这将从field对象获取一个值,该对象不会有名为VarName的字段。您可能需要field.get(实例)。即使更正了,我也不完全确定它将如何处理原始值--int和boolean--但我想如果它做了什么,它会将它们分别转换为Integer和boolean。

但让我们再往后退一步。我强烈怀疑这种方法不是你问题的答案。如果您计划通过名称访问这些值,那么它们应该在映射中,在这种情况下,您不需要反射来获取它们。如果您真的希望使用普通方法以及通过名称访问数据,您可以创建访问器方法,然后从映射中获取/放置数据。

 类似资料:
  • 使用Java反射,是否可以获取局部变量的名称?例如,如果我有: 有没有可能实现一种方法,可以找到这些变量的名称,比如: 编辑:这个问题与Java中有没有找到传递给函数的变量名称的方法不同?在这一点上,它更纯粹地询问一个人是否可以使用反射来确定局部变量的名称,而另一个问题(包括公认的答案)更侧重于测试变量的值。

  • 问题内容: 是否可以通过输入类名称作为字符串来获取类的所有实例? 像这样吗 任何反馈表示赞赏。谢谢。 问题答案: 不,没有类似的东西可用。如果您连接到调试API,则可以执行此操作,但在“正常”运行时则不能。

  • 根据JSR308(Java类型注释),可以使用elementtype.type_use注释任何类型:

  • 我声明了10个变量,它们的末尾有索引。 我想获取索引(var_5)或任何索引的值。如何使用Java动态地实现这一点。我想传递索引5,它应该返回11。

  • 问题内容: 我有一个有一堆常量字符串的类。 我需要通过反射加载此类并检索这些常量。我可以起床: 但是我对如何检索此类中的字段感到困惑。 问题答案: 访问字段的快速样本-

  • 通过下列任意一个方法访问成员变量时将返回 Field 类型的对象或数组。 getFields() getField(String name) getDeclaredFields() getDeclaredField(String name) 上述方法返回的 Field 对象代表一个成员变量。例如,要访问一个名称为 price 的成员变量,示例代码如下: Field 类的常用方法如表 1 所示 表1