newInstance()方法已过时(即:@Deprecated(since = “9”)),快来康康怎办吖?
The call
clazz.newInstance()
can be replaced by
clazz.getDeclaredConstructor().newInstance()
== 以上片段为jdk9的官方解释(clazz为Class的一个实例)==
目前大多数企业级开发还在使用jdk8,在jdk8中创建运行时类的对象时,使用的方法大多数都是clazz.newInstance();
** 但在jdk9中clazz.newInstance()被Deprecated掉了,jdk9推荐使用clazz.getDeclaredConstructor.newInstance().**
** jdk的版本在持续更新,大的方向肯定是向前走,因此笔者建议上述两种方法都掌握。**
两种方法的具体使用场景请看下方代码段:
/*
* 如何调用运行时类的构造器:
* */
@Test
public void testConstructor() throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
Class clazz = Person.class;
//1.获取指定的构造器:
Constructor con1 = clazz.getDeclaredConstructor(String.class);
//2.保证此构造器是可访问的:
con1.setAccessible(true);
//3.调用此构造器创建运行时类的对象(两种方法):
//方法一:jdk8以及8之前
//Person p1= (Person)clazz.newInstance();
//方法二:jdk9以及9之后:
Person p2 =(Person)con1.newInstance("Tom");
System.out.println(p2);
}