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);
}
|