从匿名类

时间:2015-09-22 19:41:32

标签: scala reflection

给定一个具有空构造函数和var:

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

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

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

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

1 个答案:

答案 0 :(得分:1)

你可以得到一个超类:

scala> class MyClass
defined class MyClass

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

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

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