JavaGuide icon indicating copy to clipboard operation
JavaGuide copied to clipboard

反射机制 --> Class.newInstance() && Constructor.newInstance()

Open airconditionerr opened this issue 3 years ago • 2 comments

  1. JDK9文档中,Class.newInstance()方法被标识为Deprecated,同时也提到The call clazz.newInstance() can be replaced by clazz.getDeclaredConstructor().newInstance()
  2. The Java™ Tutorials中提到Constructor.newInstance()是首选,原因为:
  • Class.newInstance() can only invoke the zero-argument constructor, while Constructor.newInstance() may invoke any constructor, regardless of the number of parameters.(Class.newInstance()方法只能调用无参数的构造方法,而Constructor.newInstance()方法可以调用任意参数数量的构造方法。)
  • Class.newInstance() throws any exception thrown by the constructor, regardless of whether it is checked or unchecked. Constructor.newInstance() always wraps the thrown exception with an InvocationTargetException.(Class.newInstance()会抛出任何构造器抛出的受检查异常和不受检查异常;Constructor.newInstance()会将抛出的异常包装在InvocationTargetException中抛出。)
  • Class.newInstance() requires that the constructor be visible; Constructor.newInstance() may invoke private constructors under certain circumstances.(Class.newInstance()要求构造方法可见;而Constructor.newInstance()在某些情况下,可以调用私有的构造方法)

Source1:https://docs.oracle.com/javase/tutorial/reflect/member/ctorInstance.html Source2:https://docs.oracle.com/javase/9/docs/api/java/lang/Class.html

airconditionerr avatar Mar 09 '22 07:03 airconditionerr

  1. JDK9文档中,Class.newInstance()方法被标识为Deprecated,同时也提到The call clazz.newInstance() can be replaced by clazz.getDeclaredConstructor().newInstance()
  2. The Java™ Tutorials中提到Constructor.newInstance()是首选,原因为:
  • Class.newInstance() can only invoke the zero-argument constructor, while Constructor.newInstance() may invoke any constructor, regardless of the number of parameters.(Class.newInstance()方法只能调用无参数的构造方法,而Constructor.newInstance()方法可以调用任意参数数量的构造方法。)
  • Class.newInstance() throws any exception thrown by the constructor, regardless of whether it is checked or unchecked. Constructor.newInstance() always wraps the thrown exception with an InvocationTargetException.(Class.newInstance()会抛出任何构造器抛出的受检查异常和不受检查异常;Constructor.newInstance()会将抛出的异常包装在InvocationTargetException中抛出。)
  • Class.newInstance() requires that the constructor be visible; Constructor.newInstance() may invoke private constructors under certain circumstances.(Class.newInstance()要求构造方法可见;而Constructor.newInstance()在某些情况下,可以调用私有的构造方法)

Source1:https://docs.oracle.com/javase/tutorial/reflect/member/ctorInstance.html Source2:https://docs.oracle.com/javase/9/docs/api/java/lang/Class.html

感谢分享👍

Snailclimb avatar Mar 12 '22 14:03 Snailclimb

  1. JDK9文档中,Class.newInstance()方法被标识为Deprecated,同时也提到The call clazz.newInstance() can be replaced by clazz.getDeclaredConstructor().newInstance()
  2. The Java™ Tutorials中提到Constructor.newInstance()是首选,原因为:
  • Class.newInstance() can only invoke the zero-argument constructor, while Constructor.newInstance() may invoke any constructor, regardless of the number of parameters.(Class.newInstance()方法只能调用无参数的构造方法,而Constructor.newInstance()方法可以调用任意参数数量的构造方法。)
  • Class.newInstance() throws any exception thrown by the constructor, regardless of whether it is checked or unchecked. Constructor.newInstance() always wraps the thrown exception with an InvocationTargetException.(Class.newInstance()会抛出任何构造器抛出的受检查异常和不受检查异常;Constructor.newInstance()会将抛出的异常包装在InvocationTargetException中抛出。)
  • Class.newInstance() requires that the constructor be visible; Constructor.newInstance() may invoke private constructors under certain circumstances.(Class.newInstance()要求构造方法可见;而Constructor.newInstance()在某些情况下,可以调用私有的构造方法)

Source1:https://docs.oracle.com/javase/tutorial/reflect/member/ctorInstance.html Source2:https://docs.oracle.com/javase/9/docs/api/java/lang/Class.html

Przemek270189wav avatar Mar 16 '22 06:03 Przemek270189wav