4

作为我第一次涉足 Dynamic Sc​​ala 领域,我想我会尝试通过 applyDynamic 访问 bean 属性。

我的第一个非常粗略的剪辑是

trait BeanProperties extends Dynamic {
  def applyDynamic(name: String)(args: Any*) = {
    if (args.length == 0)
      PropertyUtils.getProperty(this, name)
    else
      null
  }
}

以便

val bean = new JTextField("text") with BeanProperties
bean.getText should equal("text")
bean.text should equal("text")

到目前为止,一切都很好!但是当我尝试

bean.background should equal(bean.getBackground)

编译器抱怨,而是尝试授予对名为 background 的字段的访问权限,而不是合成一个方法。

variable background in class Component cannot be accessed in javax.swing.JTextField with BeanPropertiesTest.this.BeanProperties

这是设计使然,疏忽还是计划修复的事情?

4

2 回答 2

2

FWIW,我为此提出了一个修复https://github.com/scala/scala/pull/98

如果被接受,确实会在Dynamic出来的时候修复-Xexperimental。

于 2011-10-02T21:52:10.940 回答
0

Martin Odersky 在 Scala-Lang 邮件列表上的回答

我认为这应该在 Dynamic 从-Xexperimental 出来时解决。

于 2011-06-14T07:15:13.860 回答