gpt4 book ai didi

java - 使用 Java 反射设置私有(private)字段

转载 作者:行者123 更新时间:2023-11-30 06:51:49 27 4
gpt4 key购买 nike

在使用java反射时,我们是否可以设置一个私有(private)字段而不需要告诉参数类型。

例如,如果这是我的 Child 类,

package reflection;

public class Child {

private String name;
private Integer value;
private boolean flag;


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

public void setName(String name)
{
this.name = name;
}

public Integer getValue()
{
return this.value;
}

public void setValue(Integer value)
{
this.value = value;
}

public boolean getFlag()
{
return this.flag;
}

public void setFlag(boolean flag)
{
this.flag = flag;
}

public String toString()
{
return "Name" + this.name;
}
}

我想在我的 Tester 类中设置此 Child 类的字段。

package reflection;

public class Tester {

public static void main(String args[]) throws Exception
{



Class<?> clazz = Class.forName("reflection.Child");
Object cc = clazz.newInstance();
cc.getClass().getMethod("setName", String.class).invoke(cc,"AAA");
}
}

这里我设置Name字段的值。在行中,

cc.getClass().getMethod("setName", String.class).invoke(cc,"AAA");

我使用了String.class。有没有办法做到这一点,而不必告诉字段类型。 Java 能以某种方式自动识别类型吗?这是因为我将从 csv 文件中获取名称、值和标志数据,并且我想使用循环将所有三个字段设置在一行中。我将声明一个带有值的字符串数组 - “setName”、“setValue”和“setFlag”,然后我想使用以下内容

cc.getClass().getMethod(array[index]).invoke(cc,data);

我知道上面的说法是错误的,但是有什么替代方案吗?

最佳答案

获取所有方法并找到匹配的方法,其中包含有关参数的类型信息:

String name;
String value;
Method[] methods = Child.class.getMethods();
for (Method method : methods) {
if (!method.getName().equals(name))
continue;
Class<?> paramType = method.getParameterTypes()[0];
//You will have to figure how to convert the String value to the parameter.
method.invoke(child, paramType.cast(value)); // for example
}

关于java - 使用 Java 反射设置私有(private)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42609686/

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