ฉันให้เครดิต @nosebrain เนื่องจากฉันไม่ทราบเกี่ยวกับ "null-value" แต่ฉันต้องการหลีกเลี่ยงการใช้ค่า null โดยเฉพาะอย่างยิ่งเนื่องจากยากที่จะแสดงnull
ในไฟล์คุณสมบัติ
แต่นี่เป็นอีกทางเลือกหนึ่งที่ใช้ null โดยไม่มี out null-value
ดังนั้นมันจะใช้ได้กับตัวยึดคุณสมบัติ
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;
}
}
โดยส่วนตัวแล้วฉันชอบวิธีของฉันเพราะในภายหลังคุณอาจต้องการstuff.value
เป็นค่าที่คั่นด้วยจุลภาคหรืออาจจะเป็น Enum สวิตช์จะง่ายกว่า ยังง่ายกว่าในการทดสอบหน่วย :)
แก้ไข: ตามความคิดเห็นของคุณเกี่ยวกับการใช้ enums และความเห็นของฉันที่ไม่ใช้ null
@Component
public class MyObject {
@Value("${crap:NOTSET}")
private Crap crap;
public enum Crap {
NOTSET,
BLAH;
}
}
ข้างต้นใช้งานได้ดีสำหรับฉัน คุณหลีกเลี่ยงโมฆะ หากไฟล์คุณสมบัติของคุณต้องการตั้งค่าอย่างชัดเจนว่าพวกเขาไม่ต้องการจัดการมันคุณก็ทำ ( แต่คุณไม่จำเป็นต้องระบุสิ่งนี้เนื่องจากจะตั้งค่าเริ่มต้นเป็น NOTSET )
crap=NOTSET
null
NOTSET
จะไม่ดีมากและมีความแตกต่างกว่า หมายความว่าการทดสอบสปริงหรือหน่วยไม่ได้ตั้งค่าไว้ซึ่งเป็นสาเหตุที่ทำให้ IMHO มีความแตกต่าง ฉันยังคงใช้สัญกรณ์ setter (ตัวอย่างก่อนหน้า) เป็นการทดสอบหน่วยที่ง่ายกว่า (ตัวแปรส่วนตัวยากที่จะตั้งค่าในการทดสอบหน่วย)