2012-12-07 21 views
15

मैं भविष्य के जावा 8 रिलीज उर्फ ​​जेडीके 1.8 के साथ खेल रहा हूं।जावा में लैम्बडास और जेनेरिक 8

और मुझे पता चला है कि आप आसानी से

interface Foo { int method(); } 

करते हैं और तरह

Foo foo =() -> 3; 
System.out.println("foo.method(); = " + foo.method()); 

जो केवल प्रिंट 3.

उपयोग कर सकते हैं और मैं यह भी पाया गया एक जावा नहीं है। use.function.Function इंटरफ़ेस जो इसे अधिक सामान्य फैशन में करता है। हालांकि इस कोड संकलन नहीं होगा

Function times3 = (Integer triple) -> 3 * triple; 
Integer twelve = times3.map(4); 

और ऐसा लगता है कि मैं पहली बार अगर वहाँ एक और तरीका IntIntFunction कदम से बचना है

interface IntIntFunction extends Function<Integer, Integer> {} 

IntIntFunction times3 = (Integer triple) -> 3 * triple; 
Integer twelve = times3.map(4); 

की तरह कुछ तो मैं सोच रहा हूँ क्या करना है?

+6

'मैपर <इंटीजर, इंटीजर> टाइम्स 3' शायद? बेशक –

+0

। रवींद्र! –

+6

अब जब मैं जेनेरिक समझना शुरू कर रहा था, तो वे इसके साथ आते हैं: - (... – SJuan76

उत्तर

5

@joop और @edwin धन्यवाद।

जेडीके 8 की नवीनतम रिलीज के आधार पर इसे करना चाहिए।

IntFunction<Integer> times3 = (Integer triple) -> 3 * triple; 

और मामले में आप पसंद नहीं करते आप की तरह

IntFunction times3 = triple -> 3 * (Integer) triple; 

कुछ के साथ उसे कुछ अतिरिक्त चिकनी कर सकते हैं तो तुम एक प्रकार या कोष्ठक निर्दिष्ट करने की आवश्यकता नहीं है, लेकिन आप कास्ट करने के लिए की आवश्यकता होगी पैरामीटर जब आप इसे एक्सेस करते हैं।

+0

के साथ फंक्शन <इंटीजर, इंटीजर> टाइम्स 3' रुको। वहां कास्ट क्या है? क्या ऑब्जेक्ट होने के लिए' ट्रिपल 'लगेगा? क्या आप कास्टिंग करने की सलाह देते हैं 'इंटीजर' के लिए, 'int' के बजाय? – sehe

+0

मुझे नहीं लगता कि (int) कास्ट संकलित होगा। –

+0

IntFunction​​के बीच क्या अंतर हैऔर फंक्शन <इंटीजर, कुछ>? – wensveen