将父类对象的内容复制到scala中的子类对象

时间:2018-06-18 23:59:08

标签: scala scala-reflect

我有两节课。

  Class A {
      var something : String =_
   }
   Class B extends A{
      var somethingElse : String =_
   }

我将分别实例化这两个类。

var a = new A

a.something =“测试我”

var b = new B

在开始将值分配给“b”之前我想将对象“a”的内容复制到“b”中。是否可以使用反射或任何第三方API在scala中执行此操作?

1 个答案:

答案 0 :(得分:0)

apply的伴随对象中实施A => BB方法,并在[{3}}上进行反思可能会有效:

object B {
  def apply(a: A): B = {
    val aFields = a.getClass.getDeclaredFields
    aFields.foreach(_.setAccessible(true))

    val b = new B
    val bFields = b.getClass.getSuperclass.getDeclaredFields
    bFields.foreach(_.setAccessible(true))

    for {
      aField <- aFields
      bField <- bFields
      if (aField.getName == bField.getName)
    } { bField.set(b, aField.get(a)) }

    b
  }
}

var a = new A    
a.something ="test me"
var b = B(a)
println(b.something) // test me