Bagaimana cara menguji jika satu kelas java meluas yang lain saat runtime?


Jawaban:


255

Apakah Anda mencari:

Super.class.isAssignableFrom(Sub.class)

84

Jika Anda ingin tahu apakah Classmemanjang atau tidak , gunakan Kelas # isAssignableFrom (Kelas) . Sebagai contoh Anda, itu akan menjadi:

if(B.class.isAssignableFrom(A.class)) { ... }

Jika Anda tertarik pada apakah sebuah instance memiliki tipe tertentu atau tidak, gunakan instanceof:

A obj = new A();
if(obj instanceof B) { ... }

Perhatikan bahwa ini akan kembali truejika kelas / instance adalah anggota dari hirarki tipe dan tidak membatasi untuk mengarahkan hubungan superclass / subclass. Sebagai contoh:

// if A.class extends B.class, and B.class extends C.class
C.class.isAssignableFrom(A.class); // evaluates to true
// ...and...
new A() instanceof C; // evaluates to true

Jika Anda ingin memeriksa hubungan superclass / subclass langsung, Tim juga telah memberikan jawaban .


2
Sebenarnya, itu adalah B.class.isAssignableFrom (A.class), karena dia ingin tahu apakah A adalah subclass dari B.
meriton

1
Ah ya, saya akan mengubahnya. Biasanya contoh adalah sebaliknya (B extending A).
Rob Hruska

ditipu ya ;-p Banyak terima kasih atas jawaban terinci; Saya menerima meriton, karena itu adalah IMO paling jelas.
Armand

42

Anda ingin tahu apakah b dapat ditugaskan dari a :

b.isAssignableFrom(a);

Selain itu, jika Anda ingin tahu itu aadalah subkelas langsung dari b:

a.getSuperclass().equals(b);

terima kasih atas jawabannya, dan terima kasih telah menggunakan adan bdari pertanyaan
Armand
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.