मैं क्यों निम्नलिखित कोड को संकलित करता है देखने के लिए संघर्ष कर रहा हूँ:इस विधि संदर्भ असाइनमेंट संकलन क्यों करता है?
public class MethodRefs {
public static void main(String[] args) {
Function<MethodRefs, String> f;
f = MethodRefs::getValueStatic;
f = MethodRefs::getValue;
}
public static String getValueStatic(MethodRefs smt) {
return smt.getValue();
}
public String getValue() {
return "4";
}
}
मैं देख सकता हूँ क्यों पहला काम वैध है - getValueStatic
स्पष्ट रूप से निर्दिष्ट Function
प्रकार (यह एक MethodRefs
वस्तु स्वीकार करता है और देता है एक String
) से मेल खाता है, लेकिन दूसरा मुझे परेशान करता है - getValue
विधि कोई तर्क स्वीकार नहीं करता है, तो यह अभी भी f
पर असाइन करने के लिए मान्य क्यों है?
जावा 8 में गैर-स्थैतिक तरीकों के साथ [लैम्ब्डा का संभावित डुप्लिकेट] (http://stackoverflow.com/questions/25784337/lambda-with-non-static-methods-in-java-8) –
इसके अलावा [: : जावा में डबल (डबल कॉलन) ऑपरेटर 8] (http://stackoverflow.com/questions/20001427/double-colon-operator-in-java-8/22245383#22245383) और [डबल कॉलन का उपयोग - स्थिर और अंतर के बीच अंतर गैर स्थैतिक विधि संदर्भ] (http://stackoverflow.com/questions/34982972/use-of-double-colons-difference-between-static-and-non-static-method-reference?noredirect=1&lq=1) –