2011-06-05 93 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

相關問題