【问题标题】:Java: How can I access a class's field by a name stored in a variable?Java:如何通过存储在变量中的名称访问类的字段?
【发布时间】:2010-01-24 13:28:38
【问题描述】:

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

public class Test {

    public String a1;
    public String a2;  

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

}

【问题讨论】:

  • 虽然这样做是有正当理由的,但如果你试图这样做,你可能做错了什么。
  • 您的代码示例非常混乱。

标签: java class field


【解决方案1】:

你必须使用反射:

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

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);
    }
}

【讨论】:

  • set() 要求我提供两个参数,Object 和 value,为什么不只是 value?第一个参数是什么? - 字段 classField = this.getClass().getField(objField.getName()); classField.set(Object,Value)
  • @ufk:第一个参数是您要为其设置字段的对象。请注意,您通过查询类获得了 Field 实例 - 没有任何东西可以将其链接到该类的特定实例。
  • 如果它不是原始的?就我而言,它是另一个类(我要设置/更改/分配的类数组)
【解决方案2】:
Class<?> actualClass=actual.getClass();

Field f=actualClass.getDeclaredField("name");

上面的代码就足够了。

object.class.getField("foo");

不幸的是,上面的代码对我不起作用,因为该类有空字段数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-23
    • 2017-06-03
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多