当前位置: 首页 > 面试题库 >

Java:如何通过存储在变量中的名称访问类的字段?

贺飞星
2023-03-14
问题内容

如何在名称为动态并存储在字符串变量中的类中设置或获取字段?

public class Test {

    public String a1;
    public String a2;

    public Test(String key) {
        this.key = 'found';  <--- error
    }

}

问题答案:

您必须使用反射:

  • 使用Class.getField()获得Field的参考。如果它不是公开你需要调用Class.getDeclaredField(),而不是
  • 用于AccessibleObject.setAccessible在不公开的情况下访问该字段
  • 使用Field.set()设置的值,或类似名称的方法之一,如果它是一个原始

这是一个处理公共领域简单案例的示例。如果可能的话,更好的选择是使用属性。

import java.lang.reflect.Field;

class DataObject
{
    // I don't like public fields; this is *solely*
    // to make it easier to demonstrate
    public String foo;
}

public class Test
{
    public static void main(String[] args)
        // Declaring that a method throws Exception is
        // likewise usually a bad idea; consider the
        // various failure cases carefully
        throws Exception
    {
        Field field = DataObject.class.getField("foo");
        DataObject o = new DataObject();
        field.set(o, "new value");
        System.out.println(o.foo);
    }
}


 类似资料:
  • 例如,我有照片、公司、汽车等实体。我知道它们有同名的列,我可以通过QueryBuilder访问它们。我不知道我将处理哪个存储库,但它像字符串参数一样传递给我的函数。这样地: 事实上,我想检查用户是否可以通过单独的函数访问给定ID的实体,而不是绑定到一个实体。 是否可以仅通过字符串初始化TypeORM中实体的存储库或QueryBuilder?

  • 问题内容: 我有一个包含变量名称的字符串。我想获取该变量的值。 是否有可能访问该值使用? 问题答案: 我建议您改用: 通过执行操作创建地图 然后改变 至 并使用访问值

  • 问题内容: 我正在尝试创建一个BMI计算器。这应该允许人们使用公制或英制。 我意识到我可以使用隐藏标签来解决问题,但是以前这使我很头疼,所以我想问一下:我可以用来查找提交的variableName字段值;但是…我不知道,也不知道如何验证 用于 提交变量的表单。 我的代码如下(尽管我不确定它是否与问题严格相关): 我通过metric验证了它的有效性(尽管目前尚无验证-我不想让我的问题太多)。我已经添

  • 我的主班里有一个学生班。Student类包含Id和名称。在我的主要班级里,我正在把这三个学生加到名单上。现在我需要取名字不应该为空的第一个学生。为此,我使用了java stream()类,其中包含findFirst()方法来获取第一个匹配值。因此返回类型是可选的。 这是我写的 我该怎么整改呢?

  • 问题内容: 我的视图代码基本上是这样的: 我想在Django模板中执行的操作是: 我想要这样输出: 但是通过变量名称via对dict的引用实际上不起作用。我怀疑它是在内部而不是在做。有什么办法可以解决此问题? 问题答案: 没有内置的方法可以执行此操作,您需要编写一个简单的模板过滤器才能执行此操作:http : //code.djangoproject.com/ticket/3371

  • 问题内容: 我有一个返回错误的过程: 必须声明表变量“ @PropIDs”。 但随后出现以下消息: (受影响的123行) 使用以下命令执行时出现错误 但是在以下情况下可以正常工作 有人可以帮我吗?步骤: 我在声明这样的表时找到了一种解决方案: 但是,当从C#(linq sql)执行过程时,它将返回错误 问题答案: 问题在于您正在将动态SQL与非动态SQL混淆在一起。 首先-将NULL放入@NotN