नहीं, वेनिला जावा में विस्तार विधियां नहीं हैं। हालांकि, Lombok कई उपयोगी विशेषताएं जोड़ता है - विस्तार विधियों वाक्यविन्यास सहित - इसकी टिप्पणियों और बाइटकोड पीढ़ी के लिए धन्यवाद।
आप मौजूदा विधियों को विस्तार विधियों में "रूपांतरित" करने के लिए अपने @ExtensionMethod एनोटेशन का उपयोग कर सकते हैं। स्थिर तरीकों का पहला पैरामीटर मूल रूप से this
बन जाता है। - जब तक स्थिर विधि अशक्त-सुरक्षित है के रूप में, NullPointerException
फेंका नहीं किया जाएगा
import lombok.experimental.ExtensionMethod;
@ExtensionMethod({java.util.Arrays.class, Extensions.class})
public class ExtensionMethodExample {
public String test() {
int[] intArray = {5, 3, 8, 2};
intArray.sort();
String iAmNull = null;
return iAmNull.or("hELlO, WORlD!".toTitleCase());
}
}
class Extensions {
public static <T> T or(T obj, T ifNull) {
return obj != null ? obj : ifNull;
}
public static String toTitleCase(String in) {
if (in.isEmpty()) return in;
return "" + Character.toTitleCase(in.charAt(0)) +
in.substring(1).toLowerCase();
}
}
ध्यान दें कि लंबोक विस्तार तरीकों "लागू" अशक्त वस्तुओं पर हो सकता है: उदाहरण के लिए, यह एक वैध लंबोक एनहांस्ड जावा कोड है , क्योंकि इसका मूल रूप से स्थिर विधि कॉल में अनुवाद किया जाता है। हां - यह सिंटैक्स चीनी के लिए आता है, लेकिन मुझे लगता है कि यह सामान्य स्थिर तरीकों की कॉल से अभी भी अधिक पठनीय है।
इसके अलावा, आप जावा इंटरऑपरेबिलिटी के साथ कुछ अन्य जेवीएम भाषा का उपयोग कर सकते हैं, अगर यह आपके प्रोजेक्ट में ठीक है। उदाहरण के लिए, Kotlinextension methods functionality के साथ आता है, साथ ही मानक लाइब्रेरी में पहले से परिभाषित कुछ उपयोगी एक्सटेंशन भी आते हैं। यहां एक Kotlin and Lombok comparison है।
जावा में नहीं। हालांकि स्कैला में हर कोई खुश नहीं है। क्योंकि यह पठनीयता, रखरखाव में बाधा डाल सकता है। आम तौर पर XxxUtils या Xxxs जैसे कार्यों के साथ एक वर्ग बनाता है। विरासत में इसकी अपनी समस्याएं हैं (अंतिम कक्षाएं, पुरानी कोड की मजबूती से अप्रचलितता, केंद्रीकरण = केवल एक विस्तार बिंदु)। –