をJDK 1.7
で使用しています。コードレビューで問題が発生しました。SonarQubeserializeable
Java地図のマップ(例:Map <String、Map <String、String >>)がシリアル化可能でない理由
public class SerializationTest implements Serializable {
private Map<String,String> test1=new HashMap<>(); //Serializeable
private Map<ANEnum,String> test2=new HashMap<>(); //Serializeable
private Map<String,ASerializeableObject> test3=new HashMap<>(); //Serializeable
private Map<String,Map<String,String>> test4=new HashMap<>(); //Not Serializeable
private Map<ANEnum,Map<String,String>> test5=new HashMap<>(); //Not Serializeable
private Map<String,Map<String, ASerializeableObject>> test6=new HashMap<>(); //Not Serializeable
ソナーマーク最後の3 HashMap
のないよう:
サンプルの下にご検討ください。ソナーエラーは私の知る限りHashMap
を推測として(Make "test4" transient or serializable
)
でそのキーと値はserializeable
ある場合serializeable
です。しかし、HashMap
の値を別のHashMap
に設定すると、元のHashMap
はserializeable
にはなりません。
このソナーの問題は正しいですか。それはどうすれば私はそれを修正することができますか?
何かがシリアル化可能かどうかをテストするには、シリアル化します。ソナーは、実行時にマップに実際に含まれるものがシリアライズ可能かどうかを知ることはできません。また、ソナー違反について尋ねる場合は、正確で完全なメッセージとルール名を投稿してください。 –
変数が宣言され、同じステートメントで初期化されているため、Sonarqubeの部分ではむしろ労力がかかりません。 – EJP
@EJP SOnarはマップが 'Map'のインスタンスを含んでおり、' Map'がシリアライズ可能でないため、マップがシリアライズ可能であることを保証することはできません。実行時にはそうかもしれませんが、コンパイル時に内部マップが直列化可能であるという保証はありません。 –