User类
public class User {
private String id;
private String name;
private User() {
}
private User(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "学号:"+id+" "+"姓名:"+name;
}
}
因为User 的构造方法都是private,所以你new不出来
User工厂类
public class UserFactory {
public static User getUser() throws Exception { //无参构造方法
Class clazz = Class.forName("com.test.User");
Constructor c1 = clazz.getDeclaredConstructor(null); //反射中的构造器实例化
c1.setAccessible(true); //暴力,让private公开
Object obj = c1.newInstance(null); //实例化
return (User) obj;
}
public static User getUser(String id, String name) throws Exception { //有参构造方法
Class clazz = Class.forName("com.test.User");
Constructor c1 = clazz.getDeclaredConstructor(String.class, String.class);
c1.setAccessible(true);
Object obj = c1.newInstance(id, name);
return (User) obj;
}
}
测试类
public class Test {
public static void main(String[] args) throws Exception {
User user = UserFactory.getUser();
user.setId("55");
user.setName("李华");
System.out.println(user.toString());
User user2 = UserFactory.getUser("555", "李华1");
System.out.println(user2.toString());
}
}