मैं एकाधिक तर्क विधियों को आमंत्रित करने के लिए एक तरीका ढूंढ रहा हूं लेकिन lambda
निर्माण का उपयोग कर रहा हूं। प्रलेखन में यह कहा जाता है कि lambda
केवल प्रयोग योग्य है यदि यह एक कार्यात्मक इंटरफ़ेस पर मैप कर सकता है।जावा 8: परिवर्तनीय तर्क के साथ लैम्ब्डा
मैं की तरह कुछ करना चाहता हूँ:
test((arg0, arg1) -> me.call(arg0, arg1));
test((arg0, arg1, arg2) -> me.call(arg0, arg1, arg2));
...
वहाँ किसी भी तरह से एक-एक तर्क गिनती के लिए 10 इंटरफेस, एक को परिभाषित करने के बिना इस सुंदर ढंग से कर सकते हैं?
अद्यतन
मैं एक गैर विधि इंटरफ़ेस से विस्तार कई इंटरफेस का उपयोग करें और मैं विधि ओवरलोड। दो तर्क के लिए
उदाहरण: एक भी समाधान के साथ
interface Invoker {}
interface Invoker2 extends Invoker { void invoke(Object arg0, Object arg1);}
void test(Invoker2 invoker, Object ... arguments) {
test((Invoker)invoker, Object ... arguments);
}
void test(Invoker invoker, Object ... arguments) {
//Use Reflection or whatever to access the provided invoker
}
मैं एक संभावना के लिए आशा है कि 10 invoker इंटरफेस को बदलने के लिए और 10 अतिभारित तरीकों।
मेरे पास उचित उपयोग केस है और कृपया प्रश्न पूछें जैसे 'आप ऐसा क्यों करेंगे?' और 'आप जिस समस्या को हल करने की कोशिश कर रहे हैं वह क्या है?' या ऐसा कुछ भी। बस पता है कि मैंने इसे सोचा है और यह एक वैध समस्या है जिसे मैं हल करने की कोशिश कर रहा हूं।
इसे आक्रमणकर्ता कहने में भ्रम जोड़ने के लिए खेद है, लेकिन वास्तव में यह मेरे वर्तमान उपयोग मामले (परीक्षण निर्माता अनुबंध) में कहा जाता है।
मूल रूप से, जैसा ऊपर बताया गया है, lambda
के भीतर एक अलग संख्या के गुणों के साथ काम करने वाली विधि के बारे में सोचें।
संक्षिप्त उत्तर: नहीं। लंबा जवाब: nooooooooo। (लेकिन फिर, आप इस तरह की किसी चीज़ के साथ क्या करेंगे?) –
क्या आपके सभी तर्क एक ही प्रकार के हैं? यदि ऐसा है तो आपने varargs का उपयोग करने में देखा है? आप जो करने की कोशिश कर रहे हैं उसके संदर्भ में एक ठोस उदाहरण क्या है? – user4987274
लुई क्षमा करें, मैं आपके लिए एक अद्यतन (अद्यतन 2) बना देता हूं। –