我開始在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