一尘不染

为什么Class.newInstance()是“evil”?

java

为什么Class.newInstance()是“邪恶的”?

这是对代码示例的响应:

// Avoid Class.newInstance, for it is evil.
Constructor<? extends Runnable> ctor = runClass.getConstructor();
Runnable doRun = ctor.newInstance();

那么,为什么它是邪恶的?


阅读 258

收藏
2020-03-22

共1个答案

一尘不染

Java API文档解释了原因(http://java.sun.com/javase/6/docs/api/java/lang/Class.html#newInstance()):

请注意,此方法传播由nullary构造函数引发的所有异常,包括已检查的异常。这种方法的使用有效地绕过了编译时异常检查,否则该检查将由编译器执行。该Constructor.newInstance方法通过将构造函数抛出的所有异常包装在(选中)中来避免此问题InvocationTargetException

换句话说,它可以使检查异常系统失效。

2020-03-22