2013-02-23 31 views
7

Tôi không chắc chắn đây có phải là một tuyên bố dứt khoát hay không, nhưng có vẻ như với tôi rằng Java API thích liên tục ints hơn enums. Từ các phần của API mà tôi đã sử dụng, tôi đã gặp phải nhiều hằng số final static int trong đó một số enum có thể đã được sử dụng thay thế. Khi ví dụ như vậy mà tôi tình cờ được nhìn chằm chằm vào thời điểm này:Tại sao thư viện Java sử dụng ints liên tục nhiều hơn enums?

Từ java.awt.BasicStroke:

public final static int CAP_BUTT = 0; 
public final static int CAP_ROUND = 1; 
public final static int CAP_SQUARE = 2; 

Trong thực tế, tôi không nghĩ rằng tôi đã từng nhìn thấy một enum được sử dụng trong một lớp Java API tiêu chuẩn. Tại sao điều này?

Tôi đang thiết kế API cho ứng dụng của riêng mình (nhỏ hơn Java API khoảng một tỷ lần, nhưng tôi vẫn cố gắng thông minh) và cố gắng quyết định có sử dụng ints hoặc enums không. THIS bài tham khảo một cuốn sách rất phổ biến mà tôi chưa đọc mà ngụ ý enums có nhiều lợi thế. Hầu hết các câu trả lời được đánh giá cao khác trong cùng một chuỗi đó đều đồng ý. Vậy tại sao Java dường như không sử dụng khả năng enum của riêng mình?

+3

Một dự đoán chỉ xuất hiện trong tâm trí của tôi ngay sau khi đăng. Có lẽ 'enum' không có sẵn trong Java một thời gian dài trước đây khi tất cả các lớp này được thiết kế? – The111

+7

'BasicStroke' trước ngày' enum' đến Java 1.5. – Reimeus

+1

Đó có thể là mã được viết trước khi ngôn ngữ có enums. Vì nó là một API công cộng nên không thể thay đổi được – James

Trả lời

13

BasicStroke trước ngày enum có Java 1.5. Mã đã được để lại để tương thích ngược. Khi viết bất kỳ mã mới nào, enums chắc chắn là một lựa chọn thiết kế tốt hơn so với các biến số final static.

11

Không có gì liên quan đến int liên tục tốt hơn enum: chỉ là enum chỉ được thêm vào JDK 5, vì vậy hầu hết java API được viết trước khi enum có sẵn: int liên tục là tùy chọn duy nhất, đã sử dụng.

Nếu java API được viết lại, nó sẽ bao gồm nhiều enums hơn, và bạn có thể mong đợi để xem chúng xuất hiện trong bổ sung mới cho API trong JDK6 hoặc mới hơn.

Bạn có lẽ nên sử dụng enums cho ứng dụng của bạn, chúng thường là lựa chọn tốt hơn.

+0

Cảm ơn Jon, bạn sẽ nhận được câu trả lời nếu Reimeus không đăng bình luận đầu tiên của mình. ;-) Thông tin tốt ở đây. – The111

+0

Anh ta? Màn hình của tôi nói rằng tôi đã 16 phút trước, anh ấy đã 14 tuổi. Không phải tôi thất vọng: p –

+0

Anh ấy đã đăng một 'bình luận' trước khi anh ấy đăng câu trả lời'. ;-P Tôi đã hứa với anh ta "chấp nhận" nếu anh ta đăng nó như một câu trả lời, ngay trước khi tôi thấy câu trả lời của bạn xuất hiện. Đã phải trải qua lời hứa của tôi ... nhưng tôi thường cho phép chấp nhận với kẻ yếu hơn với điểm tổng thể thấp hơn. :-) – The111

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