从匿名 classes 中检索原始 class 类型

Retrieving original class types from anonymous classes

给定一个带有空构造函数和变量的 class:

class MyClass() {
  var myVar: Int = 0
}

当使用闭包实例化 class 时,这会产生一个具有匿名基础类型的对象 class 而不是 MyClass:

// getClass yields type my.package.MainClass$$anonfun$anonfun$apply...
val myNewClassInstance: MyClass = new MyClass() { myVar = 2}

是否可以使用反射和对象 myNewClassInstance 检索原始 class 类型 MyClass,以便从中创建新的对象实例?

你可以获得一个超类:

scala> class MyClass
defined class MyClass

scala> val a = new MyClass { val c = 5 }
a: MyClass{val c: Int} = $anon@48cf768c

scala> a.getClass
res0: Class[_ <: MyClass] = class $anon

scala> a.getClass.getSuperclass
res1: Class[?0] forSome { type ?0 >: ?0; type ?0 <: MyClass } = class MyClass