Scala 使用新的反射API,如何找到类的主构造函数?
您可以获得一个类的所有构造函数,如下所示:Scala 使用新的反射API,如何找到类的主构造函数?,scala,reflection,Scala,Reflection,您可以获得一个类的所有构造函数,如下所示: import scala.reflect.runtime.universe._ val ctor = typeOf[SomeClass].declaration(nme.CONSTRUCTOR).asTerm.alternatives 有没有办法知道哪一个是主构造函数?它总是列表中的第一个吗? 如果Java中定义了SomeClass,而主构造函数的概念不存在,会发生什么情况?是的,有一个名为isPrimaryConstructor的方法正是这样做的
import scala.reflect.runtime.universe._
val ctor = typeOf[SomeClass].declaration(nme.CONSTRUCTOR).asTerm.alternatives
有没有办法知道哪一个是主构造函数?它总是列表中的第一个吗?
如果Java中定义了SomeClass
,而主构造函数的概念不存在,会发生什么情况?是的,有一个名为isPrimaryConstructor
的方法正是这样做的:
val primary: Option[MethodSymbol] = typeOf[SomeClass].declaration(
nme.CONSTRUCTOR
).asTerm.alternatives.collectFirst {
case ctor: MethodSymbol if ctor.isPrimaryConstructor => ctor
}
对于Java类,只需在源文件中定义第一个构造函数。Hmm。。。这在编译器阶段(后期打字机、预pickler)内不起作用。我只得到带有
声明
或成员
的空对象。有什么想法吗?虚惊一场。是的。我传入了ClassDef.tpe
而不是ClassDef.symbol.tpe