java - 使用反射获取字段值

标签 java reflection

我无法获取字段值。我想做的是在运行时获取对象。请让我知道哪里出错了。

测试类

import java.lang.reflect.Field;

public class Test {

public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, SecurityException,
        IllegalArgumentException, IllegalAccessException {

    final Field field = Class.forName("com.logging.EX").getDeclaredField("value");
    field.setAccessible(true);
    field.get(Class.forName("com.logging.EX"));
}

EX.类

public class EX {

private String value;


public EX(){
    value="data";
}
/**
 * @return the value
 */
public String getValue() {
    return value;
}

/**
 * @param value
 *            the value to set
 */
public void setValue(String value) {
    this.value = value;
}

最佳答案

像这样的……

import java.lang.reflect.Field;

public class Test {
    public static void main(String... args) {
        try {
            Foobar foobar = new Foobar("Peter");
            System.out.println("Name: " + foobar.getName());
            Class<?> clazz = Class.forName("com.csa.mdm.Foobar");
            System.out.println("Class: " + clazz);
            Field field = clazz.getDeclaredField("name");
            field.setAccessible(true);
            String value = (String) field.get(foobar);
            System.out.println("Value: " + value);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Foobar {
    private final String name;

    public Foobar(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}

或者,您可以使用类的 newInstance 方法在运行时获取对象的实例。不过,您仍然需要先设置该实例变量,否则它将没有任何值。

例如

Class<?> clazz = Class.forName("com.something.Foobar");
Object object = clazz.newInstance();

或者,它的构造函数中有两个参数,例如 String 和 int...

Class<?> clazz = Class.forName("com.something.Foobar");
Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
Object obj = constructor.newInstance("Meaning Of Life", 42);

或者您可以在运行时使用 clazz.getConstructors()

查询它的构造函数

注意我故意省略了将此处创建的对象转换为预期类型的​​过程,因为这会打败反射点,因为如果您这样做,您已经知道该类,这将否定对反射(reflection)摆在首位。

关于java - 使用反射获取字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44395874/

相关文章:

c# - 从 C# 中的对象中清除所有字符串成员

java - 填充数组时出现 NullPointerException

java - 未使用的 import 语句 java 字符串

java - 如果一个数组被分配给一个对象引用,那么对象引用指向什么?

java - 如何使 Class.forName 返回数组类型?

reflection - 戈朗 : how to use interface{} type to insert a value into the middle of a slice?

java - 如何暂停和恢复倒计时器?

java - 如何删除 Netbean 6.8 中的生成源(jax-ws)?我应该根据网站地址从 WSDL 生成 WS 客户端还是从 api 生成 WS 客户端?

c# - 如何动态或在运行时设置 PropertyGrid 的 DefaultValueAttribute?

java - 泛型实现理解?