IntellijでシリアルバージョンUIDを生成する方法


126

私がEclipseを使用したとき、シリアルバージョンのUIDを生成する優れた機能がありました。

しかし、IntelliJで何をすべきか?

IntelliJで同一のシリアルバージョンUIDを選択または生成する方法

そして、古いクラスを変更するときはどうしますか?

を指定しない場合id、実行時に生成されます...



@JFIB serialVersionUID指定されていない場合、クラス定数はコンパイラーによって生成されます。指定することには、変更されたクラスバージョンのIDを同一に保つという利点(および危険性)があります。つまり、古いバージョンのオブジェクトを含むファイルが新しいバージョンで読み取られる(逆シリアル化される)か、またはその逆です。
Joop Eggen 14

回答:


304

プラグインなし:

ハイライトを有効にする必要があります:(アイデアv.2016、2017、2018、以前のバージョンは同じまたは同様の設定がある場合があります)

ファイル->設定->エディタ->インスペクション-> Java->シリアライゼーションの問題-> 'serialVersionUID'のないシリアライズ可能なクラス-フラグを設定して[OK]をクリックします。(Macの場合、設定はIntelliJ IDEA-> Preferences ...にあります)

これで、クラスがを実装するとSerializable、ハイライトが表示され、クラス名のalt + Enterが生成を提案しますprivate static final long serialVersionUID

UPD:この設定を見つけるためのより速い方法-ホットキーCtrl+Shift+A(アクションを見つける)を使用する場合がありますSerializable class without 'serialVersionUID'。タイプしてください-最初のものが1つです。


2
@SalilJuniorそうではありません。serialVersionUIDを生成する組み込み機能は、検査の警告に関連付けられています。検査警告を有効にしたくないが、場合によってはserialVersionUIDを生成したい場合は、行き詰まっています。
Fabian Barney

このソリューションは私にとっては機能しません。選択肢は、Parcelable実装の削除、Parcelable実装の置き換え、テストの作成、サブクラスの作成、package-privateの作成のみです。私が使用しているクラスは、ParcelableとSerializableを同時に実装しています。何か案が?
ゴンバー

上記の設定で必要なフラグが設定されていることを確認しましたか?v16とv17の両方のアイデアでテストされ、正常に動作します。また、右側の設定ウィンドウでクリックして、検査の追加設定を確認してください。
Serhii Maksymchuk 2017年

私はこれを知らなかったので、とても役に立ちました。
Chaklader Asfak Arefe

61

最も簡単な方法:Alt+ Enterオン

private static final long serialVersionUID = ;

IntelliJは=。の後のスペースに下線を引きます。その上にカーソルを置き、alt+ Enter(MacではOption+)Enterを押します。「serialVersionUIDイニシャライザをランダムに変更」というポップオーバーが表示されます。Enterキーを押すだけで、ランダムにlongがそのスペースに追加されます。


IntelliJ IDEA Community Editionバージョン2018.3.3
Tarun

Javaドキュメントでは、可能な場合はプライベート修飾子を使用することもお勧めします。 docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/...
イリヤLozinsky

2
上記のものにもっと良い答え。
Akin Okegbile

32

GenerateSerialVersionUIDプラグインをインストールする


2
以下の@Serhiiで示されているように、これが簡単にできるのにプラグインをインストールする理由。
shaz 2017

2
@shazその検査が無効になっているときのほうが好きですが、一部のクラスでは明示的なserialVersionUIDを取得する必要があります。1つだけのserialVersionUIDが必要なのに、各クラスの検査の邪魔をしたくありません。
ティモフェイ2017年

1
プラグインは、親クラスもシリアル化可能で、を含むサブクラスの値の生成に役立つと思いますserialVersionUID。これは、子クラスを更新し、親クラスのserialVersionUIDを変更せずにこのクラスの新しいserialVersionUIDを生成する必要がある場合に対処します(親クラスに変更が加えられていない場合)。
kapad

これで問題が解決する場合もありますが、リンクだけでなく、実際の情報をここに入力することをお勧めします。リンクのみの回答は適切な回答とは見なされず、おそらく削除されます。
エリクセニド

3
@EdCottrell他に提供する情報はありません。プラグインを使用するかどうか。
Meo

2

IntelliJ IDEAプラグイン/ GenerateSerialVersionUID https://plugins.jetbrains.com/plugin/?idea&id=185

とても素敵で、とても簡単にインストールできます。プラグインメニューからインストールし、ディスクからインストールを選択し、libフォルダーに解凍したjarファイルを選択します。再起動し、コントロール+ insを押してポップアップし、メニューからシリアルUIDを生成します。大好きです。:-)


0

コードエディターで、UIDを作成するクラスを開き、右クリック-> [生成]-> [SerialVersionUID]をクリックします。これを機能させるには、GenerateSerialVersionUIDプラグインをインストールする必要がある場合があります。


1
あなたの答えはこの問題を解決するために何か新しいものをどのように追加すると思いますか?答えがそうでなければ、それは役に立たないので、あなたの答えを単に取り除いてください。
nazar_art

プラグインを追加した後、実際にUIDを生成する方法について混乱する場合があります。それが追加されます。
mykey 2018

1
彼らはそのプラグインのmanページを読むことができると思います。あなたの答えは明白です。
nazar_art 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.