你可以得到这样一个类的所有构造函数:
import scala.reflect.runtime.universe._
val ctor = typeOf[SomeClass].declaration(nme.CONSTRUCTOR).asTerm.alternatives
有没有办法知道哪一个是主要的构造函数?它总是列表中的第一个吗?
如果SomeClass
在Java中定义主构造函数的概念不存在,会发生什么?
答案 0 :(得分:9)
是的,MethodSymbolApi
上有一个名为isPrimaryConstructor
的方法正是如此:
val primary: Option[MethodSymbol] = typeOf[SomeClass].declaration(
nme.CONSTRUCTOR
).asTerm.alternatives.collectFirst {
case ctor: MethodSymbol if ctor.isPrimaryConstructor => ctor
}
对于Java类,您只需获取源文件中定义的第一个构造函数。