2010-03-12 13 views
12

我一直在轉換一些代碼從Java到最近試圖教自己的語言斯卡拉。

假設我們有這樣的Scala類:

class Person() { 
    var name:String = "joebob" 
} 

現在我想從Java訪問它,就像我想如果我在斯卡拉我不能用點號。

這樣我就可以發出讓我的VAR的內容:

person = Person.new(); 
System.out.println(person.name()); 

,並通過設置:

person = Person.new(); 
person.name_$eq("sallysue"); 
System.out.println(person.name()); 

這個擁有真正的原因我們的Person類看起來像這樣的javap:

Compiled from "Person.scala" 
public class Person extends java.lang.Object implements scala.ScalaObject{ 
    public Person(); 
    public void name_$eq(java.lang.String); 
    public java.lang.String name(); 
} 

是的,我可以寫我自己的getters/setters,但我討厭填充類,它並沒有使噸考慮到我已經有了它們 - 我只是想更好地替代_ $ eq方法。 (當你處理像antlr這樣的東西時,這實際上變得更糟,因爲那麼你必須逃避它,並且它最終看起來像person.name _ \ $ eq(「newname」);

注意:我寧願有忍受這個,而不是填補我的班,更setter方法

那麼你會在這種情況下做

回答

16

您可以使用Scala的bean屬性註釋:?

class Person() { 
    @scala.reflect.BeanProperty 
    var name:String = "joebob" 
} 

,將產生爲你的getName和setName(如果你需要int的話很有用與期望javabeans的Java庫一起)

相關問題