どうすれば、エラーの表示なく、コードが作れるか教えて欲しいです。
ある参考書で、emue型を勉強していた時に、public static final
による定数には「型安全では無い」という問題があります。
と書いてありました。
そこで実際に確かめるためにコードを動かそうとしたのですが、作っている途中でエラーが起こってしまいます。
参考書に書いてあることを簡単に記入していくと...
String型の定数として、次の3つの定義します。
java
1public static final String COLOR_BLUE = "blue"; 2public static final String COLOR_YELLOW = "yellow"; 3public static final String COLOR_RED = "red";
を定義し、processColor
メソッドを定義し、
引数にcolor
を定義します。
java
1public void processColor(String color){ 2//引数を利用した処理 3}
ここで、processColor
メソッドには、COLOR_BLUE
,COLOR_YELLO
,COLOR_RED
のいずれかが渡される想定ですが、コーディングミスをしてしまい、color
値としてgreen
を渡してしまうかもしれない。
そうすると、想定とは異なる動作となってしまう。
これが、型安全では無いという状態。
また、javaではコンパイルの際に、定数を利用しているクラスの定数(利用クラス)に、定数を定義しているクラス(定数クラス)の定数の値そのものが展開される。
そのため、定数クラス側で定数の値を変更してコンパイルしても、利用クラス側の定数の値は書き換わら無い。
定数クラス側をコンパイルした場合には、利用クラスも一緒にコンパイルする必要がある、
例えば次のように定義すると、
定数クラス側の定義
java
1public static final String SELECTED_COLOR = "blue";
利用クラス側の定義
java
1 public String color = SELECTED_COLOR;
このクラスをコンパイルすると利用クラス側では次のソースと同じ状態になる。
java
1public String color = "blue";
そして、この状態で定義クラス側の定義をSELECTED_COLOR
をred
と変更してコンパイルしても、利用クラス側は、blue
のままとなってしまう。
利用クラス側も同時にコンパイルすれば値はred
に変わる。
発生している問題・エラーメッセージ
Illegal modifier for parameter color; only final is permitted
該当のソースコード
java
1public class Task { 2 3 4 5 public static final String COLOR_BLUE = "blue"; 6 public static final String COLOR_YELLOW = "yellow"; 7 public static final String COLOR_RED = "red"; 8 9 public static final String SELECTED_COLOR = "blue"; 10 public String color = SELECTED_COLOR; 11 12 13 public static void processColor(String color) { 14 15 public String color = SELECTED_COLOR; 16 17 public String color = "blue"; 18 19 } 20 21 22 23 24} 25
試したこと
Illegal modifier for parameter color; only final is permitted
と出ていたので、public
の表記を消して、color
の名前を変えることでエラーは消えたが・・・
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
eclipseを使用。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/13 14:59