जावा 8 में, केवल एक सार विधि वाला एक सार वर्ग एक कार्यात्मक इंटरफ़ेस नहीं है (JSR 335)।कार्यात्मक इंटरफेस के रूप में सार वर्ग
यह interface
एक कार्यात्मक इंटरफ़ेस है:
public interface MyFunctionalInterface {
public abstract void myAbstractMethod();
public default void method() {
myAbstractMethod();
}
}
लेकिन इस abstract class
नहीं है:
public abstract class MyFunctionalAbstractClass {
public abstract void myAbstractMethod();
public void method() {
myAbstractMethod();
}
}
तो मैं एक लैम्ब्डा अभिव्यक्ति और विधि संदर्भ के लिए एक लक्ष्य के रूप सार वर्ग उपयोग नहीं कर सकते ।
public class Lambdas {
public static void main(String[] args) {
MyFunctionalAbstractClass functionalAbstractClass =() -> {};
}
}
संकलन त्रुटि है: The target type of this expression must be a functional interface
।
भाषा डिजाइनरों ने इस प्रतिबंध को क्यों लगाया?
अच्छा सवाल ... संगतता शायद? – Mena
यह पहले से पूछा गया है और उत्तर दिया गया है ... मुख्य कारण भविष्य में लचीलापन है, जहां लैम्बडा वर्ग के उदाहरणों से बहुत अलग होने की उम्मीद है। –
यहां, इसे पढ़ें [घोड़े के मुंह से] (http://mail.openjdk.java.net/pipermail/lambda-dev/2013- मार्च /008441.html)। –