मिलाकर मेरे पास एक कार्यात्मक इंटरफ़ेस है जो सामान्य जेडीके फ़ंक्शन को सामान्य प्रकारों तक बढ़ाता है।जावा 8 फ़ंक्शन इंटरफ़ेस का विस्तार और उन्हें
public interface Transformer<T,R> extends Function<Message<T>, Message<R>> {
static <T, R> Transformer<T, R> combine2(Transformer<T, R> first, Transformer<T, R> second) {
return first.andThen(second));
}
}
वहाँ कार्यों गठबंधन करने के लिए एक तरीका है कि मानक समारोह इंटरफ़ेस फैली या वहाँ बेहतर है है: अब मैं जो संकलक त्रुटि
Error:(25, 25) java: method andThen in interface
java.util.function.Function<T,R>
cannot be applied to given types;
required:java.util.function.Function<? super ui.instrumentation.api.messaging.Message<R>,? extends V>
found:ui.instrumentation.api.transformation.Transformer<T,R>
reason: cannot infer type-variable(s) V (argument mismatch;ui.instrumentation.api.transformation.Transformer<T,R>
cannot be converted tojava.util.function.Function<? super ui.instrumentation.api.messaging.Message<R>,? extends V>
)
यहाँ फेंक है andthen का उपयोग कर दो कार्य संयोजित करना चाहते हैं नमूना कोड है ऐसा करने का तरीका?
क्यों वास्तव में आप 'combine2' समारोह की जरूरत है, जब' andThen' अधिक सामान्य तर्क प्रकार 'Function' के लिए, सचमुच एक ही बात करता है? – Mshnik
तो आप एक ऐसा फ़ंक्शन चाहते हैं जो 'संदेश' लेता है, इसे 'पहले' पर भेजता है, 'संदेश ' वापस प्राप्त करता है, फिर किसी भी तरह से 'संदेश ' से 'दूसरे' को पास करता है, भले ही 'दूसरे' को 'संदेश' की आवश्यकता हो 'एक संदेश नहीं '। –
immibis
मेरी सिफारिश: इस तरह के विस्तारित इंटरफेस का उपयोग न करें। आप आधार इंटरफ़ेस (यहां 'फ़ंक्शन') के मौजूदा कार्यान्वयन का उपयोग करने की अनुमति न देने की कीमत पर टाइप करने के लिए कुछ अक्षरों को सहेजते हैं। इस प्रकार, आपको केवल 'और फिर', 'Function.identity()' जैसे छोटे कार्यों को 'ट्रांसफॉर्मर' के रूप में उपयोग नहीं किया जा सकता है, सबकुछ फिर से लागू करने की आवश्यकता है। दूसरी गलतियों से सबक सीखो; एक ही कार्यात्मक हस्ताक्षर होने के बावजूद, आप 'ट्रांसफार्मर' का उपयोग नहीं कर सकते, जहां 'यूनरीऑपरेटर >' आवश्यक है (आधार प्रकार 'फंक्शन' की अनुमति न देने का एक और उदाहरण) ... –
Holger