私は最近const
キーワードについて読みましたが、とても混乱しています。このキーワードとval
キーワードの間に違いはありません。両方を使用して不変の変数を作成できるということです。他に不足している点はありますか?
const
sはコンパイル時定数です。実行時に設定できるval
sとは異なり、コンパイル時に値を割り当てる必要があるという意味です。
つまり、const
sは関数やクラスコンストラクターには決して代入できず、String
またはプリミティブにのみ代入できます。
例えば:
const val foo = complexFunctionCall() //Not okay
val fooVal = complexFunctionCall() //Okay
const val bar = "Hello world" //Also okay
ルカの答えに加えて:
コンパイル時定数
コンパイル時に値がわかっているプロパティは、const修飾子を使用してコンパイル時定数としてマークできます。そのような特性は、以下の要件を満たす必要があります。
- 最上位レベル、または オブジェクト宣言 または companion object のメンバー。
- String型またはプリミティブ型の値で初期化
- カスタムゲッターなし
このようなプロパティは注釈に使用できます。
出典: 公式文書
KotlinをJavaに変換することができます。そうすると、constにvalよりもstatic修飾子がもう1つあることがわかります。こんな単純なコードです。
コトリン:
const val str = "hello"
class SimplePerson(val name: String, var age: Int)
Java(部分)へ:
@NotNull
public static final String str = "hello";
public final class SimplePerson {
@NotNull
private final String name;
private int age;
@NotNull
public final String getName() {
return this.name;
}
public final int getAge() {
return this.age;
}
public final void setAge(int var1) {
this.age = var1;
}
public SimplePerson(@NotNull String name, int age) {
Intrinsics.checkParameterIsNotNull(name, "name");
super();
this.name = name;
this.age = age;
}
}