Voglio elencare tutte le classi di casi che implementano un particolare tratto. Attualmente sto usando Clapper ClassUtil per farlo. Sono in grado di ottenere le classi di casi che implementano direttamente un tratto. Tuttavia, non sono in grado di ottenere le altre classi che non implementano direttamente il tratto. Come posso ottenere tutte le classi che implementano direttamente o indirettamente un tratto. ?Ottieni tutte le classi che implementano un tratto in Scala utilizzando la riflessione
val finder = ClassFinder()
finder.getClasses().filter(_.isConcrete).filter(_.implements("com.myapp.MyTrait"))
Scala Versione: 2.11
Clapper Classe Versione Util: 1.0.6
C'è un altro modo per ottenere queste informazioni? Qualcuno può indicarmi la giusta direzione? Ho provato a utilizzare scala.reflect
ma non sono riuscito a capire come ottenere le informazioni.
EDIT:
tratti e gli usi di esempio:
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
Ora, se io do il tratto come NamedEntity
, dovrei essere in grado di ottenere sia Department
e User
dal momento che entrambi sono direttamente o indirettamente, attuando NamedEntity. Con il metodo implements
, darà solo Utente. Ho anche provato usando il metodo interfaces
, che fornirà anche solo le super classi dirette.
Potresti definire tre tratti/classi e la loro relazione per dimostrare il problema? –
Ho aggiunto i tratti del campione e gli usi della classe di casi. –