Tôi cấp tín dụng cho @nosebrain vì tôi không biết về "null-value" nhưng tôi muốn tránh sử dụng hoàn toàn các giá trị null, đặc biệt vì nó khó biểu diễn null
trong tệp thuộc tính.
Nhưng đây là một giải pháp thay thế bằng cách sử dụng null với out null-value
vì vậy nó sẽ hoạt động với những gì đã từng thuộc tính giữ chỗ.
public class MyObject {
private String value;
@Value("${stuff.value:@null}")
public void setValue(String value) {
if ("@null".equals(value)) this.value = null;
else this.value = value;
}
}
Cá nhân tôi thích cách của tôi hơn vì có thể sau này bạn muốn stuff.value
là một giá trị được phân tách bằng dấu phẩy hoặc có lẽ để Enum chuyển đổi dễ dàng hơn. Nó cũng dễ dàng hơn để kiểm tra đơn vị :)
CHỈNH SỬA: dựa trên nhận xét của bạn về việc sử dụng enums và ý kiến của tôi về việc không sử dụng null.
@Component
public class MyObject {
@Value("${crap:NOTSET}")
private Crap crap;
public enum Crap {
NOTSET,
BLAH;
}
}
Ở trên hoạt động tốt cho tôi. Bạn tránh null. Nếu các tệp thuộc tính của bạn muốn tập hợp rõ ràng mà họ không muốn xử lý nó thì bạn thực hiện ( nhưng bạn thậm chí không phải chỉ định điều này vì nó sẽ mặc định là NOTSET ).
crap=NOTSET
null
là rất xấu và là khác nhau hơn NOTSET
. Nó có nghĩa là kiểm tra mùa xuân hoặc đơn vị không thiết lập nó, đó là lý do tại sao có sự khác biệt IMHO. Tôi vẫn có thể sử dụng ký hiệu setter (ví dụ trước) vì nó dễ kiểm tra đơn vị hơn (các biến riêng rất khó đặt trong kiểm thử đơn vị).