इस लक्ष्य को पूरा करने का सामान्य तरीका यहां है:मैं अपने विधि इनपुट पैरामीटर पर मान्य बाधाओं को कैसे रख सकता हूं?
public void myContractualMethod(final String x, final Set<String> y) {
if ((x == null) || (x.isEmpty())) {
throw new IllegalArgumentException("x cannot be null or empty");
}
if (y == null) {
throw new IllegalArgumentException("y cannot be null");
}
// Now I can actually start writing purposeful
// code to accomplish the goal of this method
मुझे लगता है कि यह समाधान बदसूरत है। आपकी विधियों को विधि के दिल को अस्पष्ट करने, वैध इनपुट पैरामीटर अनुबंध की जांच करने वाले बॉयलरप्लेट कोड से जल्दी भरें।
यहां मैं यह चाहता हूं कि:
public void myContractualMethod(@NotNull @NotEmpty final String x, @NotNull final Set<String> y) {
// Now I have a clean method body that isn't obscured by
// contract checking
यदि वे एनोटेशन जेएसआर 303/बीन वैलिडेशन स्पेक की तरह दिखते हैं, तो ऐसा इसलिए है क्योंकि मैंने उन्हें उधार लिया था। दुर्भाग्य से वे इस तरह से काम नहीं कर रहे हैं; वे उदाहरण चरों को एनोटेट करने के लिए हैं, फिर ऑब्जेक्ट को वैधकर्ता के माध्यम से चला रहे हैं।
many Java design-by-contract frameworks में से कौन सा "मेरे जैसा होना" उदाहरण के लिए निकटतम कार्यक्षमता प्रदान करता है? फेंकने वाले अपवाद रनटाइम अपवाद (जैसे IllegalArgumentExceptions) होना चाहिए ताकि encapsulation टूटा नहीं जा सके।
प्रीकंडिशन। चेक एर्ग्यूमेंट (! X.isEmpty())। –
आह, लाइब्रेरी निर्माता को हमेशा हाथ में रखने में मददगार :) –