【问题标题】:InstantiationException for newInstance() [duplicate]newInstance() 的 InstantiationException [重复]
【发布时间】:2012-08-03 02:09:35
【问题描述】:

className"java.awt.Rectangle""java.lang.String" 等时,以下工作正常。但对于"java.lang.Integer""java.lang.Double"java.lang.InstantiationExceptionclassDefinition.newInstance() 则失败。

Class classs = Class.forName(className);
Object object = classs.newInstance();

这是 Wrapper 类的问题还是其他问题?

已编辑:这样做的方法 - 应归于 Jigar。

Class       integerDefinition   = Class.forName("java.lang.Integer");
Constructor intArgsConstructor  = integerDefinition.getConstructor(new Class[] {int.class});
Object[]    intArgs             = new Object[] { new Integer(12) };
Object      object              = intArgsConstructor.newInstance(intArgs);

【问题讨论】:

  • javadoc 中写得很清楚(Throws 部分:“或者如果类没有空构造函数;”)

标签: java reflection


【解决方案1】:

Class.newInstance() 只能调用零参数构造函数,Integer 没有零参数构造函数。

【讨论】:

  • 谢谢 thinksteep,你也明白了。现在我正在处理 constructor.neWInstance()
【解决方案2】:

因为Integer 没有无参数(默认)构造函数,class.newInstance() 将在内部调用默认构造函数

【讨论】:

  • 谢谢 Jigar,明白了。现在我正在处理 constructor.neWInstance()
  • 不客气,this example 会在这方面为您提供帮助
  • 感谢参考 Jigar。我更新了问题,在它的帮助下提供了答案。
  • 这个答案很有意义。但是,像this 这样调用newInstance 的类只有一个无参数构造函数有什么问题?
猜你喜欢
  • 2023-03-29
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
相关资源
最近更新 更多