मैं @nosebrain को क्रेडिट देता हूं क्योंकि मुझे "null-value" के बारे में नहीं पता था, लेकिन मैं विशेष रूप से null
एक गुण फ़ाइल में प्रतिनिधित्व करने के लिए मुश्किल के बाद से पूरी तरह से शून्य मानों का उपयोग करने से बचना पसंद करता हूं ।
लेकिन यहाँ एक विकल्प है शून्य से उपयोग करना 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
कोमा से अलग हो जाना चाहते हों या शायद एनम को स्विच करना आसान हो। इसका इकाई परीक्षण भी आसान है :)
EDIT: एनम का उपयोग करने के बारे में आपकी टिप्पणियों और अशक्त का उपयोग न करने की मेरी राय पर आधारित है।
@Component
public class MyObject {
@Value("${crap:NOTSET}")
private Crap crap;
public enum Crap {
NOTSET,
BLAH;
}
}
उपरोक्त मेरे लिए ठीक काम करता है। आप अशक्त से बचें। यदि आपकी संपत्ति फाइलें स्पष्ट रूप से निर्धारित करना चाहती हैं कि वे इसे संभालना नहीं चाहते हैं तो आप करते हैं ( लेकिन आपको इसे निर्दिष्ट करने की भी आवश्यकता नहीं है क्योंकि यह NOTSET को डिफ़ॉल्ट होगा )।
crap=NOTSET
null
बहुत बुरा है और से अलग है NOTSET
। इसका मतलब है कि वसंत या इकाई परीक्षण ने इसे सेट नहीं किया है, यही वजह है कि आईएमएचओ में अंतर है। मैं अब भी शायद सेटर नोटेशन (पिछले उदाहरण) का उपयोग करूँगी क्योंकि यूनिट टेस्ट (प्राइवेट वेरिएबल्स यूनिट यूनिट टेस्ट में सेट करना मुश्किल है)।