假设存在如下的类/trait定义:
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) ?
谢谢你的帮助。
如果你不知道对象的类型(你有一些AnyRef
),只是想测试它是否是一些类或trait的实例,那么你可以使用isInstanceOf
:
b.isInstanceOf[T2]
如果你想将其转换为该类型,那么使用asInstanceOf
b.asInstanceOf[T1]
另一方面,如果你不知道你在搜索什么,那么你可以尝试使用Java反射。要获取已实现的特性和接口列表,请使用:
c.getClass.getInterfaces
获取超类使用:
c.getClass.getSuperclass