gpt4 book ai didi

java - 使用反射获取字段值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:01 24 4
gpt4 key购买 nike

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

测试类

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com