简介
两种方式:
- 使用 Class 的 newInstance 方法
- 使用 Constructor
示例
UserInfo 类
package org.example;
import java.io.Serializable;
public class UserInfo implements Serializable {
public UserInfo() {}
public UserInfo(String name) {
this.name = name;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "UserInfo{" +
"name='" + name + '\'' +
'}';
}
}
生成对象
方式1:使用 Class 的 newInstance 方法
@Test
public void test_reflect() throws IllegalAccessException, InstantiationException {
UserInfo userInfo = UserInfo.class.newInstance();
userInfo.setName("x");
System.out.println(userInfo);
}
执行结果:
UserInfo{name='x'}
方式2:使用 Constructor
package org.example;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class TestConstructor {
// 使用无参构造函数
@Test
public void test_01() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Constructor<UserInfo> constructor = UserInfo.class.getDeclaredConstructor();
UserInfo userInfo = constructor.newInstance();
System.out.println(userInfo);
// 以上代码输出: UserInfo{name='null'}
}
// 使用有参构造函数
@Test
public void test_02() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Constructor<UserInfo> constructor = UserInfo.class.getDeclaredConstructor(String.class);
UserInfo userInfo = constructor.newInstance("李白");
System.out.println(userInfo);
// 以上代码输出: UserInfo{name='李白'}
}
}