我想列出实现特定特征的所有案例类。我目前正在使用Clapper ClassUtil来执行此操作。我能够获得直接实现特征的案例类。但是,我无法获得其他没有直接实现特征的类。如何获得直接或间接实现特征的所有类。 ?
val finder = ClassFinder()
finder.getClasses().filter(_.isConcrete).filter(_.implements("com.myapp.MyTrait"))
Scala版本:2.11
Clapper Class 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
,我应该能够同时获得Department
和User
,因为它们都直接或间接地实现了NamedEntity。使用implements
方法,它只会给用户。我也试过使用interfaces
方法,它也只提供直接超类。
答案 0 :(得分:4)
查看source code,问题似乎是它不遵循接口层次结构。如果您这样做,您会找到所有实例:
class YourClassName
{
int b;
void Start()
{
StartCoroutine("MyEvent");
b = 100; //some number
}
private IEnumerator MyEvent()
{
while(true)
{
yield return new WaitForSeconds(1); // wait a second
b--;
}
}
}
答案 1 :(得分:1)
ClassUtil现在contains this functionality(v1.4.0,也许在更早的版本中):
val finder = ClassFinder()
val impl = ClassFinder.concreteSubclasses("foo.NamedEntity", finder.getClasses())