2014-09-02 3 views
8

मैं एक स्केला समारोह वस्तु (अपाचे चिंगारी के साथ उपयोग करने के लिए विशेष रूप से) को लागू करने की कोशिश कर रहा हूँ में एक स्काला समारोह को लागू करने वह विधि जो व्यवसाय तर्क apply() लागू करती है, मुझे लगता है कि मुझे कई अन्य तरीकों को लागू करना है। लेकिन विधि नाम यहाँ अलग हैंजावा

यहाँ (खाली कार्यान्वयन के साथ उन तरीकों के साथ कोड है) -

सरल googling विधि के नाम मदद नहीं की (मैं एक tag विधि है जो लागू किया जाना चाहिए के बारे में संदर्भ में देखा था। ।

private static class functionObject implements Function0<Integer>{ 

    @Override 
    public Integer apply() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public byte apply$mcB$sp() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public char apply$mcC$sp() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public double apply$mcD$sp() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public float apply$mcF$sp() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public int apply$mcI$sp() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public long apply$mcJ$sp() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public short apply$mcS$sp() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public void apply$mcV$sp() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean apply$mcZ$sp() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

} 

क्या इन तरीकों कर रहे हैं? कैसे वे लागू किया जाना चाहिए? वहाँ एक क्लीनर समाधान है कि किसी भी वर्ग के लिए इन जोड़ने?

+0

शायद एक बेवकूफ सवाल लेकिन तुम क्यों जावा में एक स्केला समारोह लिखने की कोशिश कर रहे हैं? स्कैला में लिखें या जावा निर्माण लिखें? – nablex

+0

मैं जावा परियोजना में अपाचे स्पार्क का उपयोग करने की कोशिश कर रहा हूं। स्पार्क एक स्कैला प्रोजेक्ट है, इसलिए यह स्केल ऑब्जेक्ट्स की अपेक्षा करता है। हमारी परियोजना जावा में है, इसलिए मैं स्कैला कोड नहीं जोड़ना पसंद करता हूं। सैद्धांतिक रूप से, जावा - स्कैला (और विशेष रूप से, जावा - स्पार्क) इंटरऑपरेबिलिटी अपेक्षाकृत सरल होनी चाहिए - लेकिन जाहिर है कि कुछ ऐसे मुद्दे हैं जो बहुत ही सरल नहीं हैं (या कम से कम कमी दस्तावेज) –

+0

@Ophiiryoktan Scala -> जावा, आसान। जावा -> स्कैला; भिन्न होता है। आसान है अगर स्कैला लिब इसके लिए डिज़ाइन किया गया था (!?!) और कुरूपता की एक नाजुक गड़बड़ी –

उत्तर

14

Scalas FunctionX इंटरफेस टी हो रहा है छत, जिनके प्रकार पैरामीटर विशिष्ट हैं। चूंकि विशेषज्ञता स्केलेक द्वारा की जाती है और इसलिए जावैक द्वारा नहीं किया जा सकता है, आपको अपने आप से विशेषज्ञता से संबंधित सब कुछ लागू करना होगा।

स्काला सार कक्षाएं AbstractFunctionX, आसानी से जावा पक्ष पर लागू किया जा सकता है जो प्रदान करता है:

// example Int => Int function 
class Z extends scala.runtime.AbstractFunction1<Integer, Integer> { 
    public Integer apply(Integer i) { 
    return i; 
    } 
} 
+0

के साथ प्रतिस्थापित कर सकते हैं! मैंने स्केल 2.7 के बाद से समान वर्ग (हालांकि विशिष्ट नहीं) लागू किया है, यह देखते हुए कि वे मौजूद हैं। क्या आपको पता है कि उन्हें कब पेश किया गया था? – paradigmatic

+0

@paradigmatic दिसंबर 200 9 से: https://github.com/scala/scala/commit/f2056ddf4518285920db7554f6f93924f3cc3813 – sschaef