JavaとScalaの違いその6 ... Setter & Getter
Scalaにはstaticキーワード自体が存在しません(その代わりcase classというより便利なクラスは存在しますが)。
ですのでclassは基本的にインスタンス化しなくては使えません(case class以外)。
Javaではクラスは設計図だからインスタンスしてねーとかいっときながらstaticで使えるというダブルスタンダードだったのですがそれが改善されています。
その代わりobjectとして定義してあるものはstaticのような感覚で使うことができます。
import java.io._
import java.util._
object UseEx extends App{
ThrowEx.exex
}
object ThrowEx{
def exex{
var sc=new Scanner(System.in)
try{
println(sc.nextInt())
}catch{
case ex:InputMismatchException=>println("You are dealing with in exceptional way!!")
}finally{
}
}
}
Javaでは、ん??って思ってたとこが改善されてるのでなんかうれしいです、Scala。
次にsetter/getterについてです。
Javaではsetter/getterともにフィールドとは別に書かなければなりませんでした。
フィールドはprivateにして〜メソッドはpublic〜と一つ一つのフィールドに対してしていくわけです(もちろんツールは存在しますが)。
ですがScalaではそれらの処理を内部で行ってくれます。ですのでフィールドだけ作成すれば自動的にsetter/getterが作成されるのです!!
class Data {
var id=0
var name=""
}
object GetData extends App{
//インスタンス作成
var d1=new Data()
//setter
d1.id=1
d1.name="Tanaka"
//getter
println(d1.id)
println(d1.name)
}
ぱっとみでは単純にフィールドにアクセスしているように見えるのですが、
内部のイメージとしてはこんな感じです。順に、id getter, id setter, name getter, name setter
となっています。
def id={id}
def id_=(arg:Int):Unit={id=arg}
def name={name}
def name_=(arg:Int):Unit={id=arg}
助かりますね^^