Khi bạn xác định một enum kiếm cái gì đó có thể là "không xác định" trong giao diện của bạn, nên bạnBạn có nên xác định giá trị null/không xác định cho các enums Java không?
- xác định một giá trị enum riêng biệt cho điều đó, hoặc
- chỉ cần sử dụng enumValue = null cho những tình huống này?
Ví dụ,
serviceX.setPrice (Giá priceEnum)
enum Price {
CHEAP, EXPENSIVE, VERRRY_EXPENSIVE, UNKNOWN
}
và priceEnum.UNKNOWN khi cần thiết
hoặc
enum Price {
CHEAP, EXPENSIVE, VERRRY_EXPENSIVE
}
và priceEnum = null khi cần thiết?
Có một cuộc tranh luận nhỏ về vấn đề này. Một số điểm cần lưu ý:
- sử dụng Price.UNKNOWN lưu một số mã "if (price == null)". Bạn có thể xử lý tất cả giá trị của Giá x trong một trường hợp chuyển đổi đơn lẻ
- Tùy thuộc vào công nghệ xem, có thể dễ dàng định vị giá hơn.UNKNOWN
- sử dụng Price.UNKNOWN loại nguyên nhân "số ma thuật" trong mã, IMO . Ở đây chúng tôi có Price.UNKNOWN, ở những nơi khác có thể là Color.UNDEFINED, Height.NULLVALUE, v.v.
- sử dụng priceValue = null đồng nhất hơn với cách các loại dữ liệu khác được xử lý trong Java. Chúng tôi có Integer i = null, DomainObject x = null, String s = null cho các giá trị không xác định là tốt, phải không?
- Giá.UNKNOWN buộc bạn phải quyết định liệu giá trị null có được phép chung cho tất cả các trường hợp sử dụng hay không. Chúng tôi có thể có phương thức Price getPrice() có thể trả về Price.UNKNOWN và setPrice (Giá p) mà không được phép chấp nhận Price.UNKNOWN. Vì Price.UNKNOWN luôn được bao gồm trong các giá trị của enum, những giao diện đó trông hơi bẩn thỉu. Tôi biết priceValue = null đã cùng một vấn đề (bạn không thể xác định trong giao diện dù null được chấp nhận hay không) nhưng nó cảm thấy một chút bụi và một chút ít sai lệch (?)
bạn không thể sử dụng 'null' trong chuyển đổi và đó là nhược điểm chính. – bestsss
Điểm tốt cho tất cả mọi người. Giảm bớt gánh nặng xử lý null, và khả năng cụ thể hơn về "giá trị null" có nghĩa là những điểm tốt chuyên nghiệp Price.UNKNOWN. Ngoài ra, điểm tốt về "mẫu đối tượng null", nó làm cho Price.UNKNOWN cảm thấy giống như giải pháp "hợp lệ" hơn và được chấp nhận phổ biến. Nhưng, không ai cảm thấy như vậy về các khía cạnh tiêu cực của Price.UNKNOWN? Tôi cảm thấy có Price.UNKNOWN gây ô nhiễm giá trị của enum. Nói trong showAllPrices(), tôi không thể chỉ liệt kê tất cả các giá trị enum nữa, tôi phải thêm if (! Price.UNKNOWN), cảm giác hơi bẩn và "ma thuật số". – user449236
* @ user449236 *: Nếu bạn không thích kiểm tra giá trị đặc biệt này, hãy thêm cờ 'display' vào mỗi enum và kiểm tra nó. Sạch hơn và linh hoạt hơn. –