Tôi có một câu hỏi liên quan đến mẫu thiết kế tốt nhất để sử dụng lại mã khi xử lý các enum Java. Về cơ bản, những gì tôi đang cố gắng đạt được là có thể xác định một số enums mô hình hóa các bộ sưu tập kinh doanh tĩnh (bộ các hằng số), nhưng tôi cũng muốn chia sẻ hành vi giữa chúng, với mã hóa tối thiểu. Điều này là tầm thường để đạt được với kế thừa lớp từ lớp trừu tượng nhưng, vì Java enums không thể được mở rộng (họ chỉ có thể thực hiện giao diện), loại công việc này tẻ nhạt và liên quan đến rất nhiều công việc sao chép/dán dễ bị lỗi (sao chép). Quay lại đầu trang mã từ enum đến enum). Ví dụ về "logic nghiệp vụ" cần được chia sẻ giữa tất cả các enums bao gồm chuyển đổi từ/thành chuỗi, ví dụ và so sánh lôgic, v.v.Mở rộng Java Enums
Ảnh tốt nhất hiện tại của tôi là sử dụng lớp trợ giúp kết hợp với giao diện kinh doanh, nhưng điều này chỉ cho đến nay trong việc giảm độ phức tạp của mã (vì tất cả các enums vẫn phải khai báo và gọi các lớp trợ giúp). Xem ví dụ (chỉ để làm rõ):
public enum MyEnum {
A, B, C;
// Just about any method fits the description - equals() is a mere example
public boolean equals(MyEnum that) {
ObjectUtils.equals(this, that);
}
}
Làm thế nào để StackOverflowers đối phó với "tính năng ngôn ngữ" này?
thể thử Lombok và '@ Delegate', tôi đã không bao giờ đã thử nó với một enum. –
Trong Java 6, enums là một lớp cuối cùng; bạn không thể mở rộng chúng. Tôi tin rằng java 7 là như nhau. – DwB
Enums không được thực hiện cho điều đó: hoặc sử dụng các lớp (hoặc các lớp với enums) hoặc tách logic; bạn có thể sử dụng một mẫu nhà máy cho một trường hợp như thế này (nếu hành vi này là đủ khác nhau từ enum để enum). – Viruzzo