Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实例化对象名称并设置其值的通用方法_Java_Generics_Reflection - Fatal编程技术网

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

Java 实例化对象名称并设置其值的通用方法,java,generics,reflection,Java,Generics,Reflection,我想知道是否有一种方法允许您使用字符串创建对象 像 Class classObject=Class.forName(“客户机”); Object Object=classObject.getConstructor().newInstance(); 但是能够将变量的值设置为字段的名称 因此: Field[]fields=object.getClass().getDeclaredFields(); for(int i=0;i

我想知道是否有一种方法允许您使用字符串创建对象 像

Class classObject=Class.forName(“客户机”);
Object Object=classObject.getConstructor().newInstance();
但是能够将变量的值设置为字段的名称

因此:

Field[]fields=object.getClass().getDeclaredFields();
for(int i=0;i
所以我会有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.lang.reflect.Field;
公开课考试{
公共静态void main(字符串…参数)引发异常{
Class对象=Class.forName(“test.Property”);
Object o=Object.getDeclaredConstructor().newInstance();
系统输出打印ln(o);
字段testField=object.getDeclaredField(“测试”);
字段名Field=object.getDeclaredField(“名称”);
testField.setAccessible(true);
set(o,“Hello”);
testField.setAccessible(false);
nameField.setAccessible(true);
nameField.set(o,“名称”);
nameField.setAccessible(false);
系统输出打印ln(o);
}
}
类属性{
私有字符串测试;
私有字符串名称;
@凌驾
公共字符串toString(){
返回“Property{“+”test=“+(test==null?“null”:test)+”,name=“+(name==null?“null”:name)+'}”;
}
}
Field[] fields = object.getClass().getDeclaredFields();
for (int i=0; i< fields.length; i++)
{
    object.???????? = fields[i].getName();
}
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) + '}';
  }
}