2011-08-25 7 views
10

Supponiamo che ci siano le definizioni di classe/tratto come segue:Data un'istanza di qualsiasi tipo di classe, come scoprire quale classe genitore e/o tratti eredita da o implementa?

trait T1 {} 
trait T2 {} 
abstract class A{} 

class B {} 
class C extends A with T1 with T2 {} 

val b = new B with T1 
val c = new C 

Dato l'istanza di B e C, come faccio ad ottenere le loro informazioni eredità (cioè sapere che B implementa T1, ec implementa A, T1 e T2)?

Grazie per il vostro aiuto.

+0

http://stackoverflow.com/questions/2809463/how-to-get-list-of- tratti-che-erano-mescolati-nella-classe-specificata/2811089 –

risposta

18

Se non si conosce il tipo di oggetto (hai qualche AnyRef) e vogliono solo per verificare se si tratta di un'istanza di una classe o un tratto, quindi è possibile utilizzare isInstanceOf:

b.isInstanceOf[T2] 

Se poi si desidera lanciare a quel tipo, quindi utilizzare asInstanceOf

b.asInstanceOf[T1] 

da altra parte, se non si sa cosa si sta cercando, quindi puoi provare a usare la riflessione Java. Per ottenere l'elenco dei tratti e interfacce implementate uso:

c.getClass.getInterfaces 

per ottenere l'uso superclasse:

c.getClass.getSuperclass 
+0

Grazie, _Easy Angel_. – Adrian

Problemi correlati