数日前、Java 7を社内で使用するようになりました-最後に!Jay\o/Objects
クラスについて知り、メソッドがどれほど短いか驚いていましたhashCode()
とequals()
が実現され、デフォルトでEclipseによって生成されたコード(ALT + SHIFT + S-> H)に比べて多くのボイラープレートコードが削減されました。
Eclipseで生成されたhashCode()
およびequals()
のデフォルトの動作を変更できるかどうか疑問に思いました。
私はこれを見たいです:
_@Override
public int hashCode()
{
return Objects.hash(one, two, three, four/*, ...*/);
}
_
これの代わりに:
_@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((one == null) ? 0 : one.hashCode());
result = prime * result + ((two == null) ? 0 : two.hashCode());
result = prime * result + ((three == null) ? 0 : three.hashCode());
result = prime * result + ((four== null) ? 0 : four.hashCode());
// ...
return result;
}
_
同じことがequals()
にも当てはまります。 これは記事です 私はこれを手に入れました。
これを最もよく実現する方法はありますか?
Java 7を使用したhashCode
とequals
の生成Objects
クラスがEclipseに実装されました。機能リクエストに取り組んでいました- 424214 2018年8月に戻って、すぐに私の貢献がJDT UIコードベースにマージされました(commit f543cd6 を参照)。
Source> Generate hashCode()and equals ...ツールの新しいオプションの概要は次のとおりです。
これは2018年9月にEclipse 4.9で正式にリリースされました。Eclipseの最新バージョンをダウンロードするか(ダウンロードは here にあります)、または次の更新サイトで最新の利用可能なソフトウェアをインストールしてください: http://download.Eclipse.org/releases/latest
この新機能に加えて、配列はより巧妙に処理されるようになりました。生成では、以前は標準のArrays.deepHashCode
とArrays.deepEquals
の選択肢を誤って優先することが多かった場合に、Arrays.hashCode
メソッドとArrays.equals
メソッドを使用します。
Eclipse設定でJava> Editor> Templatesに移動します。
そこで、新しいテンプレートを作成できます。パターンは次のようになります。
@Override
public int hashCode()
{
return Objects.hash(one, two, three, four/*, ...*/);
}
ただし、フィールドを適切に列挙する変数があるかどうかはわかりません。
あなたは見てみたいかもしれません これらのテンプレートのいくつかのさらなる説明
Java 7機能、Apache共通langライブラリ、guavaライブラリを使用してtoString()、hashCode()、equals()メソッドを生成できる新しいプラグインが利用可能です。優れたカスタマイズ可能な機能を備えています。プラグインをインストールするには、以下のリンクを見つけてください。インストール後、右クリック-> Jenerate->別のオプション