我开始在Android上使用Scala,并且很多访问器方法都是标准的JavaBeans访问器,例如, setTitle(...)
和getTitle()
。这是一个要好很多使用Scala中title_=
和title
方法,这样我就可以写这样的代码:我可以从setFoo和getFoo生成foo_ =和foo访问器吗?
button.title = "Foo"
请问有什么办法可以自动这些从 JavaBean风格存取,也许使用Dynamic
特点地图吗?
我开始在Android上使用Scala,并且很多访问器方法都是标准的JavaBeans访问器,例如, setTitle(...)
和getTitle()
。这是一个要好很多使用Scala中title_=
和title
方法,这样我就可以写这样的代码:我可以从setFoo和getFoo生成foo_ =和foo访问器吗?
button.title = "Foo"
请问有什么办法可以自动这些从 JavaBean风格存取,也许使用Dynamic
特点地图吗?
我认为动态将工作,除非目前不支持语法糖。此外,它将返回AnyRef
,因为无法传递期望的返回类型。
当然,你可以简单地使用pimp我的库来添加适当的Scala风格的getter和setter。
PML绝对是我的第二选择。关于打字的好处 - 这会杀死更好语法的便利。 – Bill 2011-06-06 21:42:06
我不知道这是支持在Android,但你可以使用@BeanProperty
:
class X {
@scala.reflect.BeanProperty
var y:String = _
}
val x = new X()
x.setY("Test")
println(x.getY) //--> Test
有对Bean支持,例如更多的注解@BooleanBeanProperty
和@BeanInfo
。
我不认为动态特质会帮助你。我想你需要反思才能使用这些方法,而且他们不会通过反思来发现。
我认为你最好的机会是创建一个scala编译器插件(请参阅http://www.scala-lang.org/node/140和http://www.sts.tu-harburg.de/people/mi.garcia/ScalaCompilerCorner/)。
+1我很想听听是否有这种机制。我的预感说不。 – wheaties 2011-06-05 16:36:36
如果我愿意打开实验,我认为这可以通过混合扩展Dynamic的特征来完成,并使用反射applyDynamic将其转换为另一个特征。尽管如此,反射可能会在Android上造成不良的开销。 – Bill 2011-06-05 19:10:45