मैं इन लोगों के लिए इसी तरह के दो कार्य किया है: यह स्पष्ट है कि वे नहीं संघर्ष और कहा कि कॉल नहीं अस्पष्ट हो सकता है कर सकते हैं मेरे लिएजावा 8 कार्यात्मक इंटरफ़ेस अस्पष्ट संदर्भ (यह एक बग है?)
public static <In extends Number, Out extends Number> Out test(In in, Function<In, Out> f) {
Out x = f.apply(in);
return test(in, x);
}
public static <In extends Number, Out extends Number> Out test(In in, Out out) {
return out;
}
(!) । हालांकि, जावा 8 का नवीनतम संस्करण के साथ, निम्नलिखित कॉल के विफल:
Test.test(2, Integer::new);
Error:(17, 16) java: reference to test is ambiguous both method <In,Out>test(In,java.util.function.Function<In,Out>) in org.test and method <In,Out>test(In,Out) in org.test match
साथ
जबकि
Test.test(2, new Function<Integer, Number>() {
@Override
public Number apply(Integer integer) {
return 10;
}
});
और
Test.test(2, (Function<Integer, Number>) integer -> 10);
काम करते हैं।
इस संकलक में एक बग है (या इस असफल चाहिए?) मेरी स्थापना के बारे में
अधिक जानकारी नीचे दी
जावा संस्करण:
Desktop $ java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
त्रुटि:
Test.java:5: error: reference to test is ambiguous
Test.test(2, Integer::new);
^
both method <In#1,Out#1>test(In#1,Function<In#1,Out#1>) in Test and method <In#2,Out#2>test(In#2,Out#2) in Test match
where In#1,Out#1,In#2,Out#2 are type-variables:
In#1 extends Number declared in method <In#1,Out#1>test(In#1,Function<In#1,Out#1>)
Out#1 extends Number declared in method <In#1,Out#1>test(In#1,Function<In#1,Out#1>)
In#2 extends Number declared in method <In#2,Out#2>test(In#2,Out#2)
Out#2 extends Number declared in method <In#2,Out#2>test(In#2,Out#2)
टेस्ट प्रोग्राम:
import java.util.function.Function;
public class Test {
public static void main(String[] args) {
Test.test(2, Integer::new);
}
public static <In extends Number, Out extends Number> Out test(In in, Function<In, Out> f) {
Out x = f.apply(in);
return test(in, x);
}
public static <In extends Number, Out extends Number> Out test(In in, Out out) {
return out;
}
}
के बाद से इस मुद्दे को दूसरों के द्वारा की पुष्टि की है, मैं इसे ओरेकल के लिए एक बग के रूप में रिपोर्ट की है।
'test.test (2, (फंक्शन <इंटीजर, इंटीजर>) इंटीजर :: नया) 'मेरे लिए काम करता है। आपका रास्ता भी मेरे लिए विफल रहता है ('जावा-वर्जन' मुझे '1.8.0' देता है)। – ajb
ग्रहण में काम करता है। –