2011-08-11 56 views
12

Tôi có một đối tượng. Tôi muốn kiểm tra xem nó có thuộc loại enum hay không. Có hai cách để làm điều này.Sử dụng class.isEnum() hoặc instanceof Enum có tốt hơn không?

object.getClass().isEnum() 

hoặc

object instanceof Enum 

Là một tốt hơn?

+2

Bằng "tốt hơn", ý bạn là "dễ đọc hơn", "chạy nhanh hơn", v.v ...? – templatetypedef

+0

@templatetypedef Chủ yếu là hiệu suất sau đó dễ đọc hơn. –

+0

Nếu bạn cần xác định xem một đối tượng có phải là Enum hay không, thì câu hỏi bạn nên hỏi là "Tại sao tôi lại sử dụng thiết kế khủng khiếp này". – DwB

Trả lời

20

Theo tôi object instanceof Enum là tốt hơn vì nhiều lý do:

  • Nó là rất rõ ràng những gì được yêu cầu ở đây: "đây là một enum"?
  • Nó không có nguy cơ một NullPointerException (nếu objectnull, nó sẽ chỉ đánh giá để false)
  • Đó là ngắn hơn.

Lý do duy nhất tôi thấy khi sử dụng isEnum() sẽ là nếu tôi chỉ có quyền truy cập vào đối tượng Class chứ không phải đối tượng cụ thể.

+0

+1 về NPE. Tôi đang làm điều đó ngay bây giờ trong một vòng lặp và không chắc chắn nếu nó sẽ quan trọng –

+1

Theo như hiệu suất, 'instanceof' hoạt động nhanh hơn (nó thay đổi tùy thuộc vào lớp đang được thử nghiệm, nhưng đối với tất cả các bài kiểm tra của tôi đã được ít nhất Nhanh hơn 33% so với 'isEnum', nhanh nhất là nhanh hơn khoảng 450%). isEnum: 2691826 instanceof: 658774 – ty1824

+0

@ ty1824 - tuyệt vời. Số liệu thống kê là điều chính xác tôi đang tìm kiếm –

Các vấn đề liên quan