2011-06-05 87 views
6

我开始在Android上使用Scala,并且很多访问器方法都是标准的JavaBeans访问器,例如, setTitle(...)getTitle()。这是一个要好很多使用Scala中title_=title方法,这样我就可以写这样的代码:我可以从setFoo和getFoo生成foo_ =和foo访问器吗?

button.title = "Foo" 

请问有什么办法可以自动这些 JavaBean风格存取,也许使用Dynamic特点地图吗?

+0

+1我很想听听是否有这种机制。我的预感说不。 – wheaties 2011-06-05 16:36:36

+0

如果我愿意打开实验,我认为这可以通过混合扩展Dynamic的特征来完成,并使用反射applyDynamic将其转换为另一个特征。尽管如此,反射可能会在Android上造成不良的开销。 – Bill 2011-06-05 19:10:45

回答

3

我认为动态工作,除非目前不支持语法糖。此外,它将返回AnyRef,因为无法传递期望的返回类型。

当然,你可以简单地使用pimp我的库来添加适当的Scala风格的getter和setter。

+2

PML绝对是我的第二选择。关于打字的好处 - 这会杀死更好语法的便利。 – Bill 2011-06-06 21:42:06

0

我不知道这是支持在Android,但你可以使用@BeanProperty

class X { 
    @scala.reflect.BeanProperty 
    var y:String = _ 
} 

val x = new X() 
x.setY("Test") 
println(x.getY) //--> Test 

有对Bean支持,例如更多的注解@BooleanBeanProperty@BeanInfo

+1

对,我知道BeanProperty - 我正在寻找其他方法,即我想将getFoo/setFoo当作foo/foo_ = – Bill 2011-06-05 16:34:06

+0

糟糕,我误解了你的问题。 AFAIK没有针对该方向的内置解决方案 – Landei 2011-06-05 19:12:41

0

我不认为动态特质会帮助你。我想你需要反思才能使用这些方法,而且他们不会通过反思来发现。

我认为你最好的机会是创建一个scala编译器插件(请参阅http://www.scala-lang.org/node/140http://www.sts.tu-harburg.de/people/mi.garcia/ScalaCompilerCorner/)。

+0

为什么他们不能通过反思发现? – Bill 2011-06-06 10:56:22

+0

在applyDynamic方法中,您可以随时接受或拒绝任何呼叫,但是您没有界面来列出您接受的方法。 – thoredge 2011-06-07 08:28:44

相关问题