2017-01-10 9 views
1

Checkstyle Check を知っている人なら誰でも、シリアライズ可能なクラスを実装するすべてのクラスでシリアライゼーションIDの存在を強制できます。例えばCheckstyle、シリアル化IDの存在を強制する方法は?

public class Accounts extends implements Serializable { 

があり、この特定のケース

のチェックであるように見えるし、どのように私は不明であったないフィールド

/** 
* Id for serialization 
*/ 
private static final long serialVersionUID = 1L; 

を持っていることを余儀なくされるべき/を使用するのが適切ならば、このケースの "Regexp"チェック、 私は特定のクラス(Serialiを実装するものzable)?

どのポインタやヘルプが素晴らしいでしょう。 ありがとうございます。 luke

+0

私はcheckstyleに精通していませんが、 'serialVersionUID'が見つからないとコンパイラの警告が生成されるので、簡単に確認できます。 – shmosel

+0

私はserialVersionUIDが何の理由もなく左右に追加されているので、私は尋ねる必要があります:アプリケーションの新しいバージョンで古いシリアルデータを読み込み、それが動作することを期待していますか?答えがノーならば、serialVersionUIDを気にしないでください。 – john16384

+0

@shmoselこれは本当ですが、大規模なチームでコーディング標準を実施するのは難しく、人々は警告を無視します。残念ながら。 :) –

答えて

1

これは、Checkstyleをそのまま使用することはできません。 (さまざまな理由から、Checkstyleはバイトコードの代わりにソースコードで動作するので、クラスがSerializableを実装しているかどうかを判断するのは簡単ではありません)。しかし、write a custom checkにすることができます。

これが可能ならば、FindBugsを試してみるといいでしょう。それにはSE_NO_SERIALVERSIONIDというチェックがあります。これはあなたが必要とするだけです。また、SE_NONFINAL_SERIALVERSIONID,SE_NONLONG_SERIALVERSIONIDSE_NONSTATIC_SERIALVERSIONIDなどの関連するチェックもあります。

関連する問題