使用newInstance()创建Class类型的实例

时间:2016-02-17 09:15:18

标签: scala reflection

所以我尝试使用以下语句创建类的实例(简化):

class A
classOf[A].newInstance()

电话会引发:

java.lang.InstantiationException: A$A426$A$A426$A
Caused by: java.lang.NoSuchMethodException: A$A426$A$A426$A.<init>()

我确实尝试使用不同的变体定义 init()方法但没有成功。我错过了什么?

提前致谢。

相关,没有为我工作:

No such method exception Hadoop <init>

This answer

2 个答案:

答案 0 :(得分:1)

我怀疑你的问题是A在anther类中声明了。见这个例子:

import org.specs2.mutable.Specification

class StackoverflowSpec extends Specification {

  class B

  "A" should {
    "be instantiatable" in {
      classOf[A].newInstance() must not(beNull)
    }
  }

  "B" should {
    "throw an instantiation exception" in {
      classOf[B].newInstance must throwAn[InstantiationException]
    }
  }
}

class A

我认为正在发生的事情是,在jvm中,您的类是AStackoverflowSpec$B,并且StackoverflowSpec$B需要将StackoverflowSpec传递给它的构造函数,因为它是一个内在阶级。

答案 1 :(得分:0)

感谢您对内部课程的建议,但实际上它与IntelliJ IDEA&#39; scala工作表有关。 - 具有交互式评估的scala沙箱文件。出于某种原因,上面描述的实例化仅在工作表中抛出,它在普通的Scala REPL中工作。