给定任何类类型的实例,如何找出它继承或实现的父类和/或特征?

Adr*_*ian 10 scala

假设有类/特征定义如下:

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
Run Code Online (Sandbox Code Playgroud)

给定b和c的实例,我如何获得它们的继承信息(即知道b实现T1,c实现A,T1和T2)?

谢谢你的帮助.

ten*_*shi 20

如果您不知道对象的类型(您有一些AnyRef)并且只想测试它是某个类或特征的实例,那么您可以使用isInstanceOf:

b.isInstanceOf[T2]
Run Code Online (Sandbox Code Playgroud)

如果您想将其强制转换为该类型,请使用 asInstanceOf

b.asInstanceOf[T1]
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您不知道要搜索的内容,则可以尝试使用Java反射.要获取已实现的特征和接口列表,请使用:

c.getClass.getInterfaces
Run Code Online (Sandbox Code Playgroud)

要获得超类使用:

c.getClass.getSuperclass
Run Code Online (Sandbox Code Playgroud)