在 Java 中,通过反射(Reflection)创建实例通常有几种常见方式,取决于你是否有构造参数、是否是私有无参构造等。
Class.newInstance()(已过时,不推荐)⚠️ JDK 9 之后已废弃,仅作了解
Class<?> clazz = Class.forName("com.example.Person");
Object obj = clazz.newInstance(); // 要求有无参 public 构造
Constructor(最标准、最灵活)Class<?> clazz = Class.forName("com.example.Person");
Constructor<?> constructor = clazz.getDeclaredConstructor();
Object obj = constructor.newInstance();
Class<?> clazz = Class.forName("com.example.Person");
Constructor<?> constructor =
clazz.getDeclaredConstructor(String.class, int.class);
Object obj = constructor.newInstance("张三", 18);
Constructor<?> constructor =
clazz.getDeclaredConstructor();
constructor.setAccessible(true); // 关键
Object obj = constructor.newInstance();
Class 对象
Class.forName("全类名")obj.getClass()类名.classConstructornewInstance()ClassNotFoundException:类名写错NoSuchMethodException:构造方法不存在IllegalAccessException:权限不足(需 setAccessible(true))InstantiationException:抽象类 / 接口public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void say() {
System.out.println("Hello " + name);
}
}
public class Test {
public static void main(String[] args) throws Exception {
Class<?> clazz = Class.forName("Person");
Constructor<?> c = clazz.getConstructor(String.class);
Object p = c.newInstance("李四");
Method m = clazz.getMethod("say");
m.invoke(p);
}
}
如果你是在 Spring / Android / Kotlin 或需要 泛型、工厂模式 场景,也可以告诉我,我可以给你更具体的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。