[解決済み] SuppressWarnings("シリアル")
質問
少し混乱してきたので(あるいは、明らかなことに気づいていないのかもしれませんが)質問があります。例えば、以下のような静的フィールドを大量に含むソースコードがあるとします。
public final class ConverterTYPE {
private final static HashMap<String, Byte> STRING_MAP = new HashMap<String, Byte>() {
{
put("A", new Byte((byte)12));
put("B", new Byte((byte)13));
}
};
}
ご存知のように、静的フィールドはシリアライズされません。
しかし、Java(とEclipse)は、"The serializable class does not declare a static final serialVersionUID field of type long"と文句を言っています。なぜ、staticがシリアライズされないことに気がつかないのでしょうか?
そして、次の質問ですが、この問題に対する正しい解決策は
@SuppressWarnings("serial")
このような警告をすべて取り除くには?
EDITです。
私のクラスはどれもSerializableインターフェイスを実装していません(またはそのスーパークラスもありません)。そして、Eclipseが指しているのは
HashMap<String, Byte>
という警告が表示されます。なぜ、静的フィールドであることを検知しないのでしょうか?
解決方法は?
そのフィールドがシリアライズされないかもしれないからといって、それが参照するもの自体がシリアライズされることはないのです プライベートであることはわかりますが、現在のクラスの外からアクセスされたり、インスタンスメンバに設定されることがないようにすることは、コンパイラの範囲を超えています(そして、いずれにせよリフレクションでは不可能です)。
1つの可能な解決策は、単に匿名サブクラスとイニシャライザのスタイルをすべて回避し、これを実行することです。
private final static HashMap<String, Byte> STRING_MAP = new HashMap<String, Byte>();
static {
STRING_MAP.put("A", new Byte((byte)12));
STRING_MAP.put("B", new Byte((byte)13));
}
ほとんどの場合、結果はほぼ同じで、コードに無名クラスが散見されることもありません。
関連
-
[解決済み】popBackStack()とreplace()の操作はどう違うのですか?
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】Hibernateの例外「failed to lazily initialize a collection of role」の解決方法
-
[解決済み】破損したjarファイル
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] JavaにおけるSuppressWarnings("unchecked")とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】Javaクラスの "型に解決できない"
-
[解決済み] メソッドがスーパータイプのメソッドをオーバーライドまたは実装していない - Overrideの場合
-
[解決済み】「java -cp」と「java -jar」の違い?
-
[解決済み】Javaでユーザー入力を待機させる方法
-
[解決済み】Eclipseで「公開型 <<classname>> は独自のファイルで定義する必要があります」エラー【重複あり
-
[解決済み】Javaメソッドスタブ
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】Eclipseで「パッケージエクスプローラー」ビューが見つからない
-
[解決済み】 executeQuery()でデータ操作文が発行できない。)