java - 实例化对象名称并设置其值的通用方法

标签 java generics reflection

我想知道是否有一种方法可以让您使用字符串创建对象 喜欢

Class<?> classObject = Class.forName("Client");
Object object = classObject.getConstructor().newInstance();

但能够将变量的值设置为字段的名称

所以:

Field[] fields = object.getClass().getDeclaredFields();
for (int i=0; i< fields.length; i++)
{
    object.???????? = fields[i].getName();
}

所以我会有object.name =“name”,object.address =“address”等

我不确定如何使用我创建的实例的属性。

有人知道如何做到这一点吗?

谢谢!

最佳答案

以下是如何执行此操作的一个小示例:

package test;

import java.lang.reflect.Field;

public class Test {

  public static void main(String... args) throws Exception {
    Class<?> object = Class.forName("test.Property");
    Object o = object.getDeclaredConstructor().newInstance();
    System.out.println(o);
    Field testField = object.getDeclaredField("test");
    Field nameField = object.getDeclaredField("name");
    testField.setAccessible(true);
    testField.set(o, "Hello");
    testField.setAccessible(false);
    nameField.setAccessible(true);
    nameField.set(o, "Name");
    nameField.setAccessible(false);
    System.out.println(o);
  }

}

class Property {

  private String test;
  private String name;

  @Override
  public String toString() {
    return "Property{" + "test=" + (test == null ? "null" : test) + ", name=" + (name == null ? "null" : name) + '}';
  }
}

关于java - 实例化对象名称并设置其值的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29254365/

相关文章:

Java self 反射(reflection)

Java 反射 API。如果内部类不是公共(public)的,则无法实例化内部类

java - 如何扩展由 JAXB、CXF 或 Hibernate 工具生成的 Java 代码?

c# - 检查对象是字典还是列表

java - 是否存在 `==` 为真但 `equals` 为假的情况?

java - 重载有界泛型时,如何返回正确的类型?

java - 在 Guava 中,为什么在可能使用 "T"的地方只使用 "? super T"?

c# - 使用 C# 和反射打印完整的对象图

java - 如何以字符串形式将数字添加到数组?

java - 如何在运行时更改xml中的spring bean属性值?