Scalaの違いは何ですか
val a = 1
そして
final val fa = 1
final
メンバーは、たとえばサブクラスまたはトレイトでオーバーライドできません。
法的:
class A {
val a = 1
}
class B extends A {
override val a = 2
}
違法:
class A {
final val a = 1
}
class B extends A {
override val a = 2
}
次のようなエラーが表示されます。
:9:エラー:Int(1)型のクラスAの値aをオーバーライドします。
値aは最終メンバーをオーバーライドできません
Scalaでは、final
は、サブクラスでメンバーをオーバーライドできないことを宣言します。例えば:
class Parent {
val a = 1
final val b = 2
}
class Subclass extends Parent {
override val a = 3 // this line will compile
override val b = 4 // this line will not compile
}
また、 で説明されているように、「プライベートval」と「プライベートファイナルval」が異なるのはなぜですか? 、final val
フィールドに「定数のプリミティブ型である定数値」へのアクセスは、その値を直接読み込むためのバイトコードに置き換えられます。
また、(Java)注釈でfinal
val
s以外を使用することはできません。
たとえば、これ:
@GameRegistry.ObjectHolder(Reference.MOD_ID)
object ModItems{
}
MOD_ID
はfinal
として宣言されます。