2011-09-04 9 views
7

जाहिर है, जावा में प्रथम श्रेणी के मान के रूप में प्रतिनिधि या कार्य नहीं हैं और इसके बजाय इंटरफेस का उपयोग करते हैं, लेकिन Func <> या एक्शन <> .NET प्रतिनिधियों के निकटतम इंटरफ़ेस क्या है? रननेबल और कॉल करने योग्य <> है, लेकिन केवल स्वादों में कोई पैरामीटर नहीं ले रहा है।जावा के पास .NET Func <> और action <> प्रतिनिधियों के निकटतम चीज़ क्या है?

जावा में एक ही नाम और जेनेरिक प्रकार तर्क के विभिन्न संख्या के साथ प्रकार अतिभारित नहीं कर सकते हैं, मैं समझता हूँ कि वहाँ एक भी साझा इंटरफ़ेस नाम नहीं किया जा सकता है, लेकिन एक Runnable1 <>, Runnable2 < हो सकता है> और इतने पर।

क्या प्रोग्रामिंग की यह शैली जावा में उपयोग नहीं की गई है या क्या मुझे कोई मौजूदा इंटरफेस याद आ रहा है?

+1

एमएस बनाने से पहले वापस सी #, उनके पास जावा का कार्यान्वयन था (उन्होंने इसे जे ++ कहा)। जब उन्होंने प्रतिनिधियों को जोड़ने की कोशिश की (अन्य चीजों के साथ), सूर्य ने मुकदमा दायर किया और कहा कि वे अब जावा को शिप नहीं कर पाएंगे। और यही कारण है कि उन्होंने सी # बनाया। यदि आप जावा प्रतिनिधियों के बारे में आलेखों की खोज करते हैं, तो आप कई लोगों को जावा में प्रतिनिधियों को जोड़ने का निर्णय लेते हैं और सुझाव देते हैं कि इंटरफेस को लागू करने वाले अज्ञात आंतरिक वर्ग बहुत बेहतर हैं! – Gabe

+0

यह भी देखें http://java.sun.com/docs/white/sidebar.html – Gabe

+1

"जावा के समान नाम और सामान्य प्रकार के सामान्य प्रकार के तर्कों के साथ अधिभारित प्रकार नहीं हो सकते हैं": फिर भी एक और कारण है कि मिरर टाइप क्यों गलत दृष्टिकोण था जेनेरिक के लिए ... –

उत्तर

0

मैं नेट से बहुत परिचित नहीं हूं, लेकिन अब तक जो मैंने देखा है उससे ऐसा लगता है कि आप आमतौर पर प्रत्येक प्रकार के फ़ंक्शन/एक्शन के लिए इंटरफ़ेस बनाते हैं जिसे आप स्टोर करना चाहते हैं। यह वास्तव में वही नहीं है लेकिन आप जो खोज रहे हैं उसकी तरह लगता है।

(इंटरफ़ेस अज्ञात नहीं है, इसका नाम, एक अर्थ और दस्तावेज़ीकरण है, जो कोड को पढ़ने में आसान बना सकता है। दूसरी ओर यह लिखने के लिए एक अतिरिक्त परेशानी है, और आप केवल फेंक नहीं सकते कोई भी फ़ंक्शन जो हस्ताक्षर से मेल खाता है)।

क्या आपके पास एक विशिष्ट उपयोग केस है जिसके लिए आप एक सिफारिश की मांग कर रहे हैं? सामान्यीकृत बयान बनाना मुश्किल है;)।

+1

'कार्रवाई <> 'को" ओवरलोड "किया गया है ताकि कोई रिटर्न और एन पैरामीटर को शून्य (वर्तमान में 16), इसलिए 'कॉल करने योग्य ' बेकार है। वास्तव में, 'कॉल करने योग्य ' विवरण पढ़ने के बाद, मुझे लगता है कि जावा का 'कॉल करने योग्य ' केवल सी # के 'Func ' पर मैप किया जा सकता है, (जो शून्य पैरामीटर लेता है, और टी देता है) और कुछ भी नहीं। – paercebal

+0

धन्यवाद, इसलिए इंटरफेस शायद तकनीकी रूप से बहुत अलग हैं, अभ्यास में के लिए एक उचित विकल्प है। इसे प्रतिबिंबित करने के लिए उत्तर अपडेट किया गया। उच्च आदेश कार्यों का उपयोग करते समय –

+0

Func <> और action <> बहुत उपयोगी हैं। यदि मैं किसी सूची में सभी वस्तुओं को एक-दूसरे से मैप करना चाहता हूं, तो ऐसा करने के लिए() को चुनने के लिए मैं एक Func <,> देता हूं। यह .NET में भी एक नामित प्रतिनिधि प्रकार हो सकता है, जो नामित विशेष इंटरफ़ेस का सबसे निकटतम मैच होगा - लेकिन उन्हें अज्ञात रखने की सुंदरता इस तथ्य में निहित है कि कार्यों का उपयोग उन चीजों के लिए किया जा सकता है जिन्हें वे विशेष रूप से नहीं बनाए गए थे .. । – SoftMemes

संबंधित मुद्दे