Bagaimana menemukan kelas mana yang mengimplementasikan antarmuka tertentu di Eclipse?

88

Saya memiliki aplikasi sebagai file JAR dengan banyak dependensi. Untuk beberapa alasan saya perlu mendekompilasi salah satu perpustakaan dan membukanya dengan Eclipse. Untuk antarmuka tertentu dalam proyek, apakah ada cara untuk menemukan kelas yang mengimplementasikannya? Mungkin saja antarmuka diimplementasikan di perpustakaan lain yang belum saya dekompilasi. Apakah mungkin melakukan ini untuk kelas semacam ini?

Am1rr3zA
sumber

Jawaban:

115

Klik kanan pada antarmuka, dan pilih "Open type hierarchy". Kemudian klik "Tampilkan hierarki subjenis".

JB Nizet
sumber
Itu tidak menunjukkan apa-apa, ketika saya mengklik "Tampilkan hierarki subtipe", saya hanya melihat Antarmuka bukan kelas yang menerapkannya.
Am1rr3zA
1
Artinya, tidak ada kelas di Java Build Path dari proyek yang mengimplementasikan antarmuka ini. Eclipse tentu saja harus tahu tentang kelas-kelas potensial: file jar yang berisi kelas-kelas itu harus ada di Path Build Java proyek.
JB Nizet
Maksud Anda, saya harus menambahkan file jar lainnya ke Java Build Path?
Am1rr3zA
5
Ya tentu saja. Eclipse hanya tahu tentang kelas-kelas di classpath tersebut. Itu tidak akan memindai seluruh hard disk Anda untuk menemukan beberapa kelas yang menerapkan antarmuka Anda.
JB Nizet
Saya menambahkan file Jar lain ke Path Build Java saya tetapi masih tidak menunjukkan implementasinya. dan saya yakin beberapa kelas menerapkannya karena melalui Refleksi saya dapat menggunakannya.
Am1rr3zA
47

Coba Ctrl+ Tsetelah memilih nama kelas; harus bekerja dalam Perspektif Java.

Kalajengking
sumber
10

Anda dapat "Show Type Hierarchy" pada item (Klik Kanan untuk memilih opsi ini atau tekan F4saat item disorot) *.

Namun, ini hanya akan mencantumkan item dalam proyek yang dirujuk ("tergantung"). Tidak pada orang lain.

Jadi, jika Anda telah mendekompilasi sebuah jar, dan ada jar lain yang belum Anda dekompilasi, maka implementasi (antarmuka) dalam jar itu tidak akan dicantumkan.

Juga, katakanlah Anda telah mendekompilasi sebuah botol sebagai sebuah proyek dan ada proyek lain yang merujuk ke botol tersebut, dan bukan proyek yang didekompilasi, implementasi di dalamnya juga tidak akan dicantumkan.

Jadi Anda harus mendekompilasi semua toples dan menambahkannya sebagai proyek (dan menambahkan referensi melalui "Java Build Path") untuk memastikan semua implementasi dalam toples pilihan Anda telah terdaftar.

* Hierarki tipe cepat, ctrl + T akan menampilkan struktur serupa di panel jenis tooltip / pelengkapan otomatis. Namun hierarki tipe lengkap lebih berguna untuk tipe analisis yang ingin Anda lakukan.

Nivas
sumber
8

Ada tombol radio "Pelaksana" di Pencarian Java.

Vlad
sumber
3
Bagaimana tidak menjawab pertanyaan itu? Buka Pencarian Java, masukkan nama antarmuka, klik "Pelaksana" dan Anda akan "menemukan kelas mana yang menerapkan antarmuka tertentu."
stackexchanger
1

Atau klik kanan dan pilih Quick Type Hierarchymenu pull-down untuk memperluas antarmuka dan kelas implementasi.

Sean Patrick Floyd
sumber
Ketika saya mengklik kanan dan memilih Quick Type Hierarchy, saya hanya melihat Antarmuka, bukan kelas yang menerapkannya
Am1rr3zA
0

Ctrl + H (Opsi Pencarian) Buka perspektif Pencarian Java dan, masukkan nama antarmuka, klik tombol radio Implementors dan Anda akan menemukan kelas mana yang menerapkan antarmuka tertentu. Sama seperti jawaban dari stackexchanger di atas

Rohit Mathur
sumber
0

Pilih nama kelas, lalu 'F4' di Eclipse (lingkungan Windows)

FullStackDeveloper
sumber