निम्न कार्य क्यों नहीं करते?जावा 8 किसी विशेष प्रकार के मनमानी ऑब्जेक्ट की उदाहरण विधि के लिए विधि संदर्भ
import java.util.function.Function;
public class MethodRefTest {
public String passMeAround(String input) {
return input + " been passed to me";
}
public Function<String, String> testReferences() {
final Function<String, String> f1 = MethodRefTest::passMeAround;
return f1;
}
public static void main(String[] args) {
new MethodRefTest()
.testReferences()
.apply("foo");
}
}
javac मुझसे कहता है:
MethodRefTest.java:14: error: invalid method reference
final Function<String, String> f1 = MethodRefTest::passMeAround;
^
non-static method passMeAround(String) cannot be referenced from a static context
1 error
मैं समझ में नहीं आता क्यों संदर्भ स्थिर है। मैंने this पढ़ा लेकिन ऐसा लगता है कि यह समस्या का जवाब नहीं दे रहा है।
संपादित
इसके अलावा oracle के अनुसार, "एक विशेष प्रकार का एक मनमाना वस्तु का एक उदाहरण विधि के लिए संदर्भ" संभव के माध्यम से ContainingType::methodName
संपादित 2
@ मार्को-topolnik मदद की हैं मैं यहां अपनी गलती को समझता हूं। Function<String, String> f1 = MethodRefTest::passMeAround;
, एक स्थिर विधि String MethodRefTest.passMeAround(String)
BiFunction<MethodRefTest, String, String> f1 = MethodRefTest::passMeAround;
दूसरी ओर
को संदर्भित करता है any instance
के कहने विधि को संदर्भित करता, जो लागू हों खंड में पारित हो जाता है।
BiFunction<MethodRefTest, String, String> f2 = MethodRefTest::passMeAround;
//call instance method
f2.apply(new MethodRefTest(), "some string");
@ AlexandroSifuentesDíaz समय जावा 8 सीखने के लिए समय है। यह काफी समय से बाहर है। –
खराब त्रुटि संदेश। – ZhongYu
लेकिन @BrianGoetz, 'वर्ग :: विधि' (और ओपी के मामले में _does_) एक उदाहरण विधि संदर्भ को हल कर सकता है। त्रुटि संदेश भ्रामक है क्योंकि वास्तविक समस्या लक्ष्य प्रकार और आवृत्ति विधि संदर्भ के प्रकार के बीच मेल नहीं है। –