私はJavaが初めてで、列挙が最終変数を廃止したかどうかを知ることができませんでしたか?
5 に答える
列挙型と最終変数は無関係です。列挙型が登場する前は、定数に頼らなければなりませんでしたが、それらは同等ではありませんでした。
絶対違う。Java の final 変数は、単なる定数以上のものを食べました。
- Final をメソッド パラメーターに適用して、再割り当てに対するコンパイル時の保証を提供できます。
- Final をローカル変数に適用して、再割り当てに対するコンパイル時の保証を提供できます。これは、ローカル変数 (クロージャーとも呼ばれます) を参照する匿名の内部クラスをインスタンス化する場合にも必要です。
- Final をインスタンス変数に適用して、これらのフィールドの参照の不変性を保証できます。フィールド型が不変であるか、適切な防御手段が講じられている場合、これを使用してオブジェクトの不変性を確保し、簡単にスレッドセーフにすることができます。
- Final をメソッドに適用して、サブクラスがそれらをオーバーライドするのを防ぐことができます。
- Final をクラスに適用して、クラスの拡張をまったく防止できます。
ご覧のとおり、final
キーワードにはまだ多くの用途があります。
この質問では、他の型ではなく整数定数について質問していると思いますか? そうでない場合は、列挙型は列挙型 (int) のみであり、特定の型にすることはできないことに注意してください。
そうでなければ... 繰り返しますが、それらが時代遅れになることはありません。列挙型は、変更されることのない (小さいような) 有限数の可能性しかない場合に役立ちます。これらが無限の数 (または多数) になる可能性がある場合、またはすべてが完全に定義されていなくても一部が定義される可能性がある場合は、あまり役に立ちません。
それは本当に使い方次第です。
名前付き定数として使用される変数を意味する場合public static final int
、はい、列挙型は代わりに使用されることを意図しています。
ただし、いくつかの地域ではまだ final 変数が有用です。
final int foo = 3; // must be marked final
t = new Thread(new Runnable() {
public static void run() {
System.out.println(foo + 1);
}
});
t.start();
さらに、PSF 変数は構成定数として引き続き使用できます。
まあ、両方に異なるアプリケーションがあります。列挙型は、ステート マシンや値が関連しない場所などに適しています。プログラムの 1 つで、値と状態インジケーターの両方として機能する一連の最終変数があります。final 変数は、プログラム全体でリテラル値を簡単に変更できるため、依然として重要な用途があります。
/一言で言えば