假设有类/特征定义如下:
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
鉴于b和c的实例,我如何得到它们的继承信息(即知道b实现T1,c实现A,T1和T2)?
感谢您的帮助。
答案 0 :(得分:20)
如果您不知道对象的类型(您有一些AnyRef
)并且只想测试它是某个类或特征的实例,那么您可以使用isInstanceOf
:
b.isInstanceOf[T2]
如果您想将其强制转换为该类型,请使用asInstanceOf
b.asInstanceOf[T1]
另一方面,如果您不知道要搜索的是什么,那么您可以尝试使用Java反射。要获得已实现的特征和接口的列表,请使用:
c.getClass.getInterfaces
要获得超类使用:
c.getClass.getSuperclass