Làm thế nào để kiểm tra nếu một lớp java mở rộng lớp khác trong thời gian chạy?


Câu trả lời:


255

Có phải bạn đang tìm kiếm:

Super.class.isAssignableFrom(Sub.class)

84

Nếu bạn muốn biết liệu có Classmở rộng cái khác hay không , hãy sử dụng Class # isAssignableFrom (Class) . Ví dụ của bạn, nó sẽ là:

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

Nếu bạn quan tâm đến việc một thể hiện có thuộc loại cụ thể hay không, hãy sử dụng instanceof:

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

Lưu ý rằng những thứ này sẽ trả về truenếu lớp / thể hiện là thành viên của hệ thống phân cấp kiểu và không bị hạn chế đối với các mối quan hệ siêu lớp / lớp con trực tiếp. Ví dụ:

// 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

Nếu bạn muốn kiểm tra các mối quan hệ siêu lớp / lớp con trực tiếp, Tim cũng đã cung cấp câu trả lời .


2
Trên thực tế, đó là B.group.isAssignableFrom (A. class), vì anh ta muốn biết liệu A có phải là một lớp con của B.
meriton

1
À vâng, tôi sẽ thay đổi điều đó. Thông thường các ví dụ là cách khác (B kéo dài A).
Rob Hruska

lừa ya ;-p Rất cám ơn câu trả lời chi tiết; Mặc dù vậy, tôi chấp nhận meriton, vì đây là IMO rõ ràng nhất.
Armand

42

Bạn muốn biết nếu b được gán từ a :

b.isAssignableFrom(a);

Ngoài ra, nếu bạn muốn biết đó alà lớp con trực tiếp của b:

a.getSuperclass().equals(b);

cảm ơn câu trả lời và cảm ơn vì đã sử dụng abtừ câu hỏi
Armand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.