Pertanyaan Bagaimana cara mengajarkan gerhana untuk menghasilkan equals kompak () dan hashCode () dari jdk 7 Objects class?


Beberapa hari yang lalu kami beralih ke Java 7 di Perusahaan saya - akhirnya! Jay \ o / Jadi saya mengetahui tentang Objects kelas dan heran betapa singkatnya metode hashCode() dan equals() disadari, mengurangi banyak kode boylerplate dibandingkan dengan yang dihasilkan oleh gerhana per default (ALT + SHIFT + S -> H).

Saya bertanya-tanya apakah saya bisa mengubah perilaku default dari gerhana yang dihasilkan hashCode() dan equals()?

Saya ingin melihat ini:

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

bukannya ini:

@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;
}

Hal yang sama berlaku untuk equals(). Ini artikelnya Saya dapat ini.

Ada gagasan bagaimana mewujudkan yang terbaik ini?


32
2017-07-22 07:24


asal


Jawaban:


Dalam preferensi Eclipse pergi ke Java> Editor> Templates.

Di sana Anda dapat membuat template baru. Pola tersebut dapat terlihat seperti:

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

Saya tidak yakin apakah ada variabel yang benar-benar menyebutkan bidang Anda.

Anda mungkin ingin melihat beberapa penjelasan lebih lanjut tentang templat ini


4
2017-07-22 07:27



Ada plugin baru yang tersedia yang dapat menghasilkan toString (), hashCode (), equals () metode menggunakan fitur java 7, perpustakaan pustaka umum apache, perpustakaan jambu biji. Ini memiliki fitur yang dapat disesuaikan dengan baik. Silakan temukan tautan di bawah ini untuk memasang plugin. Setelah instalasi, klik kanan -> Jenerate -> opsi yang berbeda

Tautan - https://marketplace.eclipse.org/content/jenerate


2
2017-07-08 18:59



hashCode dan equals generasi menggunakan Java 7 Objects kelas sekarang telah diimplementasikan dalam Eclipse. Saya telah mengerjakan permintaan fitur 424214 dalam dua minggu terakhir dan kontribusi saya sekarang telah digabungkan dalam basis kode JDT UI (lihat commit f543cd6).

Berikut ini ikhtisar dari opsi baru di Source> Generate hashCode () dan equals ... alat:

New option in generation tool

Ini dijadwalkan akan dirilis secara resmi di Eclipse 4.9, jatuh tempo pada bulan September 2018. Anda dapat mencobanya terlebih dahulu dengan mengunduh integrasi membangun I20180808-2000 atau yang lebih baru (unduhan dapat ditemukan sini), atau dengan menginstal perangkat lunak terbaru yang tersedia dengan situs pembaruan berikut: http://download.eclipse.org/eclipse/updates/4.9-I-builds/

Selain fitur baru ini, array kini ditangani lebih cerdik. Generasi akan menggunakan Arrays.deepHashCode dan Arrays.deepEquals metode dalam sejumlah kasus di mana sebelumnya akan salah memilih standar Arrays.hashCode dan Arrays.equals alternatif.


0
2017-08-09 20:27