web-dev-qa-db-ja.com

jdk 7オブジェクトクラスからコンパクトなequals()とhashCode()を生成するようにEclipseに教える方法は?

数日前、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()にも当てはまります。 これは記事です 私はこれを手に入れました。

これを最もよく実現する方法はありますか?

35
Aufwind

Java 7を使用したhashCodeequalsの生成ObjectsクラスがEclipseに実装されました。機能リクエストに取り組んでいました- 424214 2018年8月に戻って、すぐに私の貢献がJDT UIコードベースにマージされました(commit f543cd6 を参照)。

Source> Generate hashCode()and equals ...ツールの新しいオプションの概要は次のとおりです。

New option in generation tool

これは2018年9月にEclipse 4.9で正式にリリースされました。Eclipseの最新バージョンをダウンロードするか(ダウンロードは here にあります)、または次の更新サイトで最新の利用可能なソフトウェアをインストールしてください: http://download.Eclipse.org/releases/latest

この新機能に加えて、配列はより巧妙に処理されるようになりました。生成では、以前は標準のArrays.deepHashCodeArrays.deepEqualsの選択肢を誤って優先することが多かった場合に、Arrays.hashCodeメソッドとArrays.equalsメソッドを使用します。

11
Pyves

Eclipse設定でJava> Editor> Templatesに移動します。

そこで、新しいテンプレートを作成できます。パターンは次のようになります。

@Override
public int hashCode()
{
     return Objects.hash(one, two, three, four/*, ...*/);
}

ただし、フィールドを適切に列挙する変数があるかどうかはわかりません。

あなたは見てみたいかもしれません これらのテンプレートのいくつかのさらなる説明

4
reto

Java 7機能、Apache共通langライブラリ、guavaライブラリを使用してtoString()、hashCode()、equals()メソッドを生成できる新しいプラグインが利用可能です。優れたカスタマイズ可能な機能を備えています。プラグインをインストールするには、以下のリンクを見つけてください。インストール後、右クリック-> Jenerate->別のオプション

リンク- https://marketplace.Eclipse.org/content/jenerate

3
Nirav Pradhan