จะค้นหาได้อย่างไรว่าคลาสใดใช้อินเทอร์เฟซเฉพาะใน Eclipse


88

ฉันมีแอปพลิเคชันเป็นไฟล์ JAR ที่มีการอ้างอิงมากมาย ด้วยเหตุผลบางประการฉันจำเป็นต้องแยกไลบรารีหนึ่งไลบรารีและเปิดขึ้นด้วย Eclipse สำหรับอินเทอร์เฟซที่กำหนดในโปรเจ็กต์มีวิธีค้นหาคลาสที่ใช้งานหรือไม่ อาจเป็นกรณีที่อินเทอร์เฟซถูกนำไปใช้ในไลบรารีอื่นที่ฉันยังไม่ได้ถอดรหัส เป็นไปได้หรือไม่ที่จะทำสิ่งนี้สำหรับชั้นเรียนประเภทนี้

คำตอบ:


116

คลิกขวาที่อินเทอร์เฟซแล้วเลือก "ลำดับชั้นประเภทเปิด" จากนั้นคลิกที่ "แสดงลำดับชั้นประเภทย่อย"


มันไม่ได้แสดงอะไรเลยเมื่อฉันคลิกที่ "แสดงลำดับชั้นของประเภทย่อย" ฉันเพิ่งเห็นอินเทอร์เฟซที่คลาสไม่ได้ใช้งาน
Am1rr3zA

1
หมายความว่าไม่มีคลาสใน Java Build Path ของโปรเจ็กต์ที่ใช้อินเทอร์เฟซนี้ แน่นอนว่า Eclipse ต้องรู้เกี่ยวกับคลาสที่เป็นไปได้: ไฟล์ jar ที่มีพวกมันต้องอยู่ใน Java Build Path ของโปรเจ็กต์
JB Nizet

คุณหมายถึงฉันต้องเพิ่มไฟล์ jar อื่น ๆ ใน Java Build Path หรือไม่
Am1rr3zA

5
ใช่แน่นอน Eclipse รู้เกี่ยวกับคลาสใน classpath เท่านั้น จะไม่สแกนฮาร์ดดิสก์ทั้งหมดของคุณเพื่อค้นหาบางคลาสที่ใช้อินเทอร์เฟซของคุณ
JB Nizet

ฉันเพิ่มไฟล์ Jar อื่น ๆ ใน Java Build Path ของฉัน แต่ยังไม่ได้แสดงการใช้งาน และฉันแน่ใจว่าบางคลาสใช้มันเพราะผ่านการสะท้อนกลับฉันสามารถใช้มันได้
Am1rr3zA


10

คุณสามารถ "แสดงลำดับชั้นของประเภท" บนรายการ (คลิกขวาเพื่อเลือกตัวเลือกนี้หรือกดF4เมื่อรายการถูกไฮไลต์) *

อย่างไรก็ตามสิ่งนี้จะแสดงเฉพาะรายการในโครงการที่อ้างถึง ("ขึ้นอยู่กับ") ไม่ใช่ในคนอื่น

ดังนั้นหากคุณแยกชิ้นส่วนโถแล้วและมีโถอื่นที่คุณยังไม่ได้แยกย่อยการใช้งาน (ของอินเทอร์เฟซ) ในโถนั้นจะไม่ปรากฏในรายการ

นอกจากนี้สมมติว่าคุณได้ถอดรหัส jar เป็นโปรเจ็กต์และมีอีกโปรเจ็กต์หนึ่งที่อ้างถึง jar และไม่ใช่โปรเจ็กต์ที่แยกส่วนการใช้งานในนั้นจะไม่อยู่ในรายการด้วย

ดังนั้นคุณจะต้องถอดรหัส jars ทั้งหมดและเพิ่มเป็นโปรเจ็กต์ (และเพิ่มการอ้างอิงผ่าน "Java Build Path") เพื่อให้แน่ใจว่าการใช้งานทั้งหมดในไหที่คุณเลือกอยู่ในรายการ

* Hierarchy ประเภทด่วนctrl + T จะแสดงโครงสร้างที่คล้ายกันในแผงคำแนะนำเครื่องมือ / การเติมข้อความอัตโนมัติ แต่ลำดับชั้นของประเภทที่สมบูรณ์จะมีประโยชน์มากกว่าสำหรับประเภทการวิเคราะห์ที่คุณต้องการจะทำ


8

มีปุ่มตัวเลือก "Implementors" ใน Java Search


3
ยังไงก็ไม่ตอบคำถาม เปิด Java Search ป้อนชื่ออินเทอร์เฟซคลิก "Implementors" และคุณจะพบว่าคลาสใดใช้อินเทอร์เฟซเฉพาะ "
stackexchanger

1

หรือคลิกขวาและเลือกQuick Type Hierarchyสำหรับเมนูแบบเลื่อนลงของส่วนต่อประสานที่ขยายและการใช้งานคลาส


เมื่อฉันคลิกขวาและเลือก Quick Type Hierarchy ฉันเพิ่งเห็นอินเทอร์เฟซที่คลาสไม่ได้ใช้งาน
Am1rr3zA

0

Ctrl + H (ตัวเลือกการค้นหา) เปิดมุมมองการค้นหา Java และป้อนชื่ออินเทอร์เฟซคลิกปุ่มตัวเลือก Implementors และคุณจะพบว่าคลาสใดใช้อินเทอร์เฟซเฉพาะ เหมือนกับคำตอบจาก stackexchanger ด้านบน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.