特定の特性を実装するすべてのケースクラスをリストしたいと思います。私は現在、そのためにClapper ClassUtilを使用しています。私は、特性を直接実装しているケースクラスを得ることができます。しかし、私は、その特性を直接的に実装していない他のクラスを手に入れることはできません。どのようにして、直接的または間接的に特性を実装するすべてのクラスを得ることができますか。 ?反射を使用してScalaの特性を実装するすべてのクラスを取得する
val finder = ClassFinder()
finder.getClasses().filter(_.isConcrete).filter(_.implements("com.myapp.MyTrait"))
Scalaのバージョン:2.11
クラッパークラスUtilのバージョン:1.0.6
は、私はこれらの情報を得ることができる他の方法はありますか?誰かが私に正しい方向を向けることができますか? scala.reflect
を使ってみましたが、情報を取得する方法を理解できませんでした。
EDIT:
サンプルの特性と用途:今すぐ
trait BaseEntity
trait NamedEntity{ val name:String}
trait MasterDataEntity extends NamedEntity
case class Department(id:Long, override val name:String) extends MasterDataEntity
case class Employee(id:Long, name:String) extends BaseEntity
case class User(id:Long, override val name:String) extends NamedEntity
私はNamedEntity
として形質を与える場合は、それらの両方が、直接的または間接的にNamedEntityを実装しているので、私はDepartment
とUser
の両方を得ることができる必要があります。 implements
メソッドを使用すると、ユーザーのみが表示されます。私はinterfaces
メソッドを使って試してみました。このメソッドはダイレクトスーパークラスも提供します。
問題を示すために3つの特性/クラスとその関係を定義できますか? –
私はサンプルの形質とケースクラスの使用法を追加しました。 –