实例化对象名称并设置其值的通用方法
Generic way to instantiate an object name and set its values
我想知道是否有一种方法可以让您使用字符串创建对象
喜欢
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) + '}';
}
}
我想知道是否有一种方法可以让您使用字符串创建对象 喜欢
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) + '}';
}
}