Scala,反映在一个字段上,因此它可以用懒惰的eval知道它自己的名字

时间:2015-11-09 20:02:02

标签: scala reflection

我目前正在尝试改进Dsl,而我想要做的是使预定义的字段类型能够“知道”'它自己的名字。我可以使用override def delayedInit(body:=> Unit)和反射来实现这一点,但我希望这能支持递归数据结构的惰性eval。

所以我有一个粗略的方法如下:

class NamedProperty {
  var name:String = ""
}

class HasNamed extends App {
  val myName = new NamedProperty

  lazy val thisWontWork = new NamedProperty

  override def delayedInit(body: => Unit) = {
    body
    this.getClass.getMethods.foreach(m =>
      if (classOf[NamedProperty].isAssignableFrom(m.getReturnType) && m.getTypeParameters.isEmpty) {
        m.invoke(this) match {
          case prop:NamedProperty =>
            prop.name = m.getName
          case _ =>
        }
      }
    )  
  }
}

不幸的是,上面将解决懒惰的thisWontWork属性,因为我需要它只在被调用后才能解析它的名字

0 个答案:

没有答案