2010-07-25 5 views
3

Oui, vous pouvez définir un nom de propriété par setName et l'obtenir par getName. Mais qu'en est-propriété comme celui-ci en C#:Comment utiliser la propriété sur Scala?

int Name{ 
    get{return name;} 
    set{name = value;} 
} 

ou

Name{get; set;} 

(propriété auto)

Je me demande si une telle chose existe dans Scala. Googler sans aucun signal.

Répondre

8
scala> class A { 
    | var name: String = "" 
    | } 
defined class A 

scala> val a = new A 
a: A = [email protected] 

scala> a.name = "kool" 

scala> a.name 
res0: String = kool 

scala> class A { 
    | private var _name = "" 
    | def name = _name     // a getter 
    | def name_=(value: String) {  // a setter 
    |  _name = value 
    | } 
    | } 
defined class A 

scala> val a = new A 
a: A = [email protected] 

scala> a.name = "abc" 

scala> a.name 
res1: java.lang.String = abc 
4

Juste pour être complet, si vous ne souhaitez que des champs immuables (recommandé!)

case class A(name: String) 

est la même chose que

class A(val name: String) 

en ce qui concerne les champs immuables/propriétés. Le mot-clé "case" fait automatiquement valoir les arguments du constructeur, ainsi que l'ajout d'autres goodies.

4

Vous pouvez utiliser scala.reflect.BeanProperty si vous voulez obtenir java/méthodes set

class Person { 
    @scala.reflect.BeanProperty 
    private var name: String = _ 
} 

val p = new Person 
p.setName("Peter") 
println(p.getName) 
Questions connexes