实例化在Scala中扩展特征的所有类

时间:2016-03-21 07:51:44

标签: scala inheritance reflection

所以我正在构建一个库,我遇到的问题如下:

我有一个特征,比如

package my.library
trait Animal {
  def randomFunctions
}

我需要知道的是消费者代码所具有的所有类,即扩展/实现所述特征,例如

package code.consumer
case class Cat extends Animal
case class Dog extends Animal

总而言之:在我的库(具有特征)中,我需要找出扩展/实现特征的所有类(在消费者代码中)。

2 个答案:

答案 0 :(得分:3)

我终于通过使用带有以下小片段的反射(https://github.com/ronmamo/reflections)解决了这个问题:

val reflection = new Reflections()
reflection.getSubTypesOf(classOf[Animal])

答案 1 :(得分:0)

选项是使用sealed trait。这会强制特征的所有实现驻留在与定义特征相同的文件中。

这会破坏您的消费者和库代码的分离,但您肯定会得到所有实现。

我能想到的另一个选择是使用IDE,比如IntelliJ,它可以根据给定的特征找到所有实现。