Scala da POJO benzeri deyimlere sahiptir, ancak JavaBeans'dan farklıdır ve Scala farklı yönlere vurgu yapar.
Scala farklı adlandırma kurallarına sahiptir:
def foo: Foo //Foo getFoo() in Java
def foo_=(foo: Foo) //void setFoo(Foo foo) in Java
her zaman yazabilirsiniz Bu şekilde obj.foo
ve doğrudan saha erişim ve tersi için getters/belirleyiciler geçmeye karar bile obj.foo = bar
. Bu üniforma erişim ilkesi denir.
@BeanProperty var foo: Foo = _
sadece yukarıdaki kod getters/setters Scala benzeri oluşturur, ancak Java benzeri de, yani tüm Java çerçeveler sorunsuzca çalışan:
- Java birlikte çalışabilirlik,
@BeanProperty
açıklama tanıtıldı nedeniyle.
Scala kendinizi çok daha sık değişmez nesneler
kullanarak bulmak, böylece değişkenler (var
) ve değerler (val
) arasında karar vermeye zorlar Gerçekten yapılmış olan yapıcı iletmenin nesneleri ve başlatma tercih
Scala çok kolay:
class Foo(val age: Int, val name: String)
hatta (varsayılan olarak val
case
yılında sınıflar):
case class Foo(age: Int, name: String)
Bu kod parçası sadeliği açısından zekice.
public class Foo(var age: Int, var name: String) {
def this() {
this(0, "")
}
}
Not val
var
yerini: Java çerçeveler ile işbirliği yapmak gerekir, ancak, yine de hayır-argU yapıcısı ve ayarlayıcılar gerekir.Scala
Erişim düzenleyiciler Java ile karşılaştırıldığında biraz daha iyi varsayılan vardır:
class Foo(var a: Int, x: Int) {
var b: Int = _
private var c: Int = _
private[this] var d: Int = _
def twisted = a + b + c + d + x
}
Değişkenler a
ve b
public
odaklar/belirleyiciler ile private
alanlar haline gelecektir (alanlar varsayılan olarak gizli olduğu, yöntemler halka açıktır). c
ve d
, özel değişkenlerdir. Ancak ekstra private[this]
, d
'u özel alıcı/ayarlayıcıdan ziyade sınıfta doğrudan erişilebilir hale getirir.
x
, kurucunun yanında bir yerde kullanıldığından, Scala da bunun için otomatik olarak özel bir alan oluşturur. Ancak hiçbir alıcı/belirteç oluşturulmaz, doğrudan twisted
yöntemine (d
ile aynı) erişilir.
GÜNCELLEME: Yorumlarda, alıcıları/ayarlayıcıları yeniden adlandırmayı soruyorsunuz. İşte daha karmaşık bir örnek. Alıcılar/ayarlayıcılar aynı anda iki alana dayalı değerini hesaplıyoruz:
class Foo {
private[this] var first: Char = _
private[this] var rest: String = _
def fake = first + rest
def fake_=(s: String) {
first = s.head
rest = s.tail
}
}
içeride karmaşık görünüyor ama dışarıdan o eski güzel özelliği benziyor: Eskiden olduğu takdirde gibi
val foo = new Foo()
foo.fake = "ABC"
println(foo.fake)
:
class Foo(var fake: String)
Ve bunu 8 dakikada yazdınız mı? Bu harika! : D – aitchnyu
"aProperty" öğesini istediğinizde bu kod nedir, ancak aString: String' özniteliğine dayanmaktadır? – aitchnyu
@aitchnyu: Düzenlemeye devam ediyorum ;-). Ayrıca Scala-Java entegrasyonu ile çok çalışıyorum. –