में हस्ताक्षर पॉलिमॉर्फिक तरीकों पर जहां तक मैं कह सकता हूं, जावा 7 में मेथडहैंडल की शुरूआत के साथ संकलक-जेनरेटेड विधि ओवरलोड का परिचय आया।जावा -7
javadoc for MethodHandle राज्यों (मैं उदाहरण छंटनी की है):
Object x, y; String s; int i;
mh = ...
// (Ljava/lang/String;CC)Ljava/lang/String;
// (String, char, char) -> String
s = (String) mh.invokeExact("daddy",'d','n');
// (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
// (Object, Object, Object) -> Object
x = mh.invokeExact((Object)1, (Object)2, (Object)3);
// (Ljava/util/List;)I
// (List) -> int
i = (int) mh.invokeExact(java.util.Arrays.asList(1,2,3));
// (Ljava/io/PrintStream;Ljava/lang/String;)V
// (PrintStream, String) -> void
mh.invokeExact(System.out, "Hello, world.");
ऊपर कॉल से प्रत्येक नाम के साथ एक एकल invokevirtual अनुदेश उत्पन्न करता है:
यहाँ उपयोग के कुछ उदाहरण हैं आह्वान करें और टाइप डिस्क्रिप्टर टिप्पणियों में इंगित किए गए हैं। तर्क प्रकार सीधे वास्तविक तर्कों से लिया जाता है, जबकि वापसी का प्रकार तत्काल कॉल पर लागू किया जाता है। यह कास्ट एक आदिम हो सकता है। यदि यह गुम है, तो संदर्भ किसी ऑब्जेक्ट पर डिफ़ॉल्ट होता है यदि कॉल संदर्भ में होता है जो रिटर्न मान का उपयोग करता है। यदि कॉल एक कथन के रूप में होता है, तो एक कास्ट असंभव है, और कोई वापसी प्रकार नहीं है; कॉल शून्य है।
असल में, लागू करें और मित्र व्यवहार करते हैं जैसे कि पैरामीटर और रिटर्न प्रकार के हर संभावित संयोजन के लिए अधिभार होता है।
मैंने सुना है कि मेथड हैंडल जावा 8 में लैम्बडास जैसी सुविधाओं के लिए तैयारी कर रहे हैं। (मैं जानता हूँ कि वे पहले से ही पटकथा भाषाओं के लिए उपयोगी होते हैं।)
[/ परिचय]
इसलिए, इन संकलक उत्पन्न भार के जावा में चारों ओर छुपाने का अधिक कर रहे हैं? क्या संकेत हैं कि उनमें से अधिक भविष्य में होंगे (कहें, विस्तार विधियों के साथ)? पहली जगह क्यों जरूरी है? केवल गति? यह लैम्बडास को कैसे मदद करता है (
मैंने सोचा था कि लैम्बडास अज्ञात आंतरिक वर्ग
) को संकलित करेगा?
संक्षेप में, तर्क क्या है; वे अब और भविष्य में उपयोगी क्यों हैं (जेनरेट ओवरलोड)?
अद्यतन: क्या मैं संकलक उत्पन्न भार के यहां फोन, ओरेकल लोग फोन हस्ताक्षर polymophic।
+1 ग्रेट संदर्भ सामग्री। –