5

您可以像这样获取类的所有构造函数:

import scala.reflect.runtime.universe._

val ctor = typeOf[SomeClass].declaration(nme.CONSTRUCTOR).asTerm.alternatives

有没有办法知道哪个是主构造函数?它总是列表中的第一个吗?如果SomeClass在 Java 中定义了主构造函数的概念不存在,会发生什么?

4

1 回答 1

9

是的,有一个方法MethodSymbolApi可以isPrimaryConstructor做到这一点:

val primary: Option[MethodSymbol] = typeOf[SomeClass].declaration(
  nme.CONSTRUCTOR
).asTerm.alternatives.collectFirst {
  case ctor: MethodSymbol if ctor.isPrimaryConstructor => ctor
}

对于 Java 类,您将只获得源文件中定义的第一个构造函数。

于 2013-05-11T11:35:30.583 回答