5

次のように、クラスのすべてのコンストラクターを取得できます。

import scala.reflect.runtime.universe._

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

どちらがプライマリ コンストラクタであるかを知る方法はありますか? それは常にリストの最初ですか?プライマリ コンストラクタSomeClassの概念が存在しないJava で定義されている場合はどうなりますか?

4

1 に答える 1

9

そうです、正確にこれを行うメソッド on MethodSymbolApicalledがあります: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 に答える