Khi có bộ xử lý chú thích TypeElement
, bạn có thể yêu cầu cấp siêu hạng (hoặc cụ thể hơn là TypeMirror
của nó) bằng phương pháp getSuperClass()
. According to the JavaDoc, loại không bùng nổ mở rộng bất kỳ thứ gì (nói cách khác, Object
là lớp siêu) hoặc đó là giao diện sẽ trả về một số NoType
với NONE
là TypeKind
.Kiểm tra sự vắng mặt của siêu lớp trong bộ xử lý chú thích
Bỏ qua thực tế rằng toàn bộ mô hình/gương điều API dường như đi ra khỏi con đường của nó để gây nhầm lẫn bạn tại mọi cơ hội trong một thời điểm, làm thế nào tôi sẽ kiểm tra đáng tin cậy cho điều này? Dưới đây là một số chiết xuất mã:
//Cast is safe since TypeKind is checked before this
final TypeElement el = (TypeElement)annotatedElement;
...
final TypeMirror parent = el.getSuperclass();
//Checking whether "nothing" is extended
if(parent.getKind().equals(TypeKind.NONE) && parent instanceof NoType) {
...
}
Đây có phải là cách thích hợp không? Nó có vẻ khá clunky. Vì không nên sử dụng equals
method of TypeMirror để kiểm tra bình đẳng ngữ nghĩa, tôi tự hỏi liệu có an toàn không khi sử dụng nó cho TypeKind
. Cảm giác ruột của tôi nói có vì nó là một enum, nhưng sau đó tôi có nghi ngờ về điều đó instanceof
.
Có cách nào tốt hơn để thực hiện việc này không? Toàn bộ gói javax.lang.model và các con của nó có tham chiếu chéo trên tất cả các cửa hàng và nó không bao giờ thực sự rõ ràng đối với tôi phương pháp tốt nhất cho cái gì đó là gì. Có những phương pháp tiện ích hữu ích cho một số công cụ, và sau đó có những nhiệm vụ dường như đơn giản đòi hỏi nhào lộn đáng ngờ như trên.