假设存在类/特征定义,如下所示:
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
),而只想测试它是否是某个类或特征的实例,则可以使用isInstanceOf
:
b.isInstanceOf[T2]
如果您随后想要将其转换为该类型,请使用
asInstanceOf
b.asInstanceOf[T1]
另一方面,如果您不知道要搜索的内容,则可以尝试使用Java反射。要获取已实现的特征和接口(interface)的列表,请使用:
c.getClass.getInterfaces
要获得父类(super class)使用:
c.getClass.getSuperclass
关于scala - 给定任何类类型的实例,如何找出它从哪个父类和/或特征继承或实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7196259/