2010-03-12 17 views
12

Son zamanlarda kendime dili öğretmeye çalışarak bazı kodları java'dan scala'ya dönüştürüyorum.

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

Şimdi ben scala olsaydı yazar gibi ben nokta gösterimini kullanamaz java den erişime bunu istiyorum:

bu scala sınıfı olduğunu varsayalım.

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

ve üzeri ayarlayın:

Yani düzenlenmek suretiyle benim VAR içeriğini alabilirsiniz

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(); 
} 
:

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

Bu bizim Kişi Sınıf javap içinde şuna benzer gerçek nedenini tutar

Evet, kendi alıcılarımı/dizgileri yazabilirim ama sınıfları doldurmaktan nefret ederim. zaten sahip olduğumu düşünerek duyumsama - sadece _qq yöntemini daha iyi taklit etmek istiyorum. (Bu aslında antlr gibi şeyler ile uğraşırken daha da kötüleşir çünkü o zaman oradan kaçmak zorunda kalırsınız ve kişi gibi görünmeye başlar. \ _ _ad ("newname");

Not: Daha çok daha ayarlayıcı yöntemleri ile benim sınıfları buna katlanmak yerine doldurmak için Yani bu durumda ne yapacağını

cevap

16

sen Scala'nın fasulye mülkiyet ek açıklama kullanabilirsiniz

:.?

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

üretecektir O getName ve setName sizin için (int'ye ihtiyacınız varsa kullanışlıdır) javabeanları bekleyen Java kütüphaneleriyle çıkartın)