मैं जावा 8. की नई सुविधाओंक्या जावा 8 विधि संदर्भ के लिए फ्लाई पर इंटरफेस लागू कर सकता है?
मैं अलग उदाहरण के साथ खेल रहा हूँ जानने के लिए और मैं एक अजीब व्यवहार पाया है:
public static void main(String[] args) {
method(Test::new);
}
static class Test{
}
private static void method(Supplier<Test> testSupplier){
Test test = testSupplier.get();
}
इस कोड को सफलतापूर्वक संकलित लेकिन मैं पता नहीं यह कैसे काम करता है।
Test::new
प्रदायक के रूप में स्वीकार्य क्यों है?
प्रदायक इंटरफ़ेस बहुत सरल दिखता है:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
गतिशील रूप से कार्यान्वित करने के लिए किस तरह का होता है AFAIK यह जानवर है: ['java.lang.invoke.LambdaMetafactory'] (https://docs.oracle.com/javase/8/docs/api/java/lang/ invoke/LambdaMetafactory.html) – zapl
ध्यान दें कि "खाली" वर्ग घोषणा, जैसे कि आपके 'कक्षा टेस्ट' के लिए, निहित रूप से नो-एर्ग कन्स्ट्रक्टर है। यही कारण है कि आप 'नया टेस्ट() 'लिख सकते हैं और इसे काम कर सकते हैं, किसी भी इस कन्स्ट्रक्टर के लिए लैम्ब्डा या विधि संदर्भ क्यों काम करता है। –
@Sotirios Delimanolis शायद लिंक किए गए प्रश्न पर पहली टिप्पणी अधिक प्रासंगिक – gstackoverflow