Thực hành tốt nhất để đóng gói enums Java? [đóng cửa]


8

Cách thực hành tốt nhất để đóng gói các enum Java là gì?

nó là tập tin riêng biệt cho mỗi enum?
hoặc
có cùng một tập tin cho tất cả các enum?

Những ưu và khuyết điểm là gì ?

Câu trả lời:


9

Đầu tiên, một quy tắc ghi đè là nếu một enumcông khai, nó phải được khai báo trong một tệp của riêng nó. Đây là một quy tắc Java áp dụng cho tất cả các lớp, giao diện và enums, không thể bị phá vỡ.

Đối với enums không công khai , bạn nên tuân theo cùng một quy tắc, ngoại trừ khi nhiều enums được kết nối chặt chẽ.

Ví dụ: nếu bạn đang xây dựng bộ xử lý biểu thức và khai báo kiểu liệt kê cho loại phụ biểu thức, loại phụ biểu thức nhị phân và loại phụ biểu thức đơn, bạn có thể muốn nhóm ba bảng liệt kê lại với nhau trong một tệp.


Giải thích tuyệt vời. Có bất kỳ tác động hiệu suất? nếu chúng ta có các enum kết nối chặt chẽ trong cùng một lớp so với việc có từng enum cho mỗi enum.
Goodspeed

1
@goodspeed Việc đặt các lớp / enums / giao diện trong các tệp không có tác động hiệu năng (ngoại trừ có thể ảnh hưởng nhỏ đến tốc độ biên dịch mà bạn sẽ không nhận thấy bằng mọi cách).
dasblinkenlight

@dasblinkenlight Bạn có tài liệu để chứng minh câu thứ hai của mình không, nói rằng các enum công khai nên được đặt trong tập tin riêng của nó?
Tối đa

1
@Max Các quy tắc cho enums không khác với quy tắc cho các lớp khác: nếu một lớp là công khai, nó cần phải ở trong tệp tại một vị trí thích hợp khớp với tên gói, với tên lớp khớp với tên tệp.
dasblinkenlight

@dasblinkenlight Ah, cảm ơn thông tin và thời gian của bạn.
Tối đa

4

Enums là các lớp vì vậy bạn nên đóng gói chúng như các lớp bình thường. Nếu enum được sử dụng ở nhiều nơi trong gói thì đặt nó vào một tệp duy nhất. Nếu enum được liên kết chặt chẽ với một lớp, thì đặt nó làm lớp bên trong tĩnh (hoặc được bảo vệ).

Tôi không thấy lý do cho việc đặt tất cả các enum trong một tệp trừ khi chúng có liên quan.


Nếu chúng có liên quan, bạn có thể lồng chúng trong một lớp. lớp công khai Pse164884 {public enum Cat {siamese, manx} public enum Dog {bullgog, poodle}}
Ray Tayek
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.