के साथ कार्यात्मक इंटरफ़ेस के रूप में मैं बस नई जावा सुविधाओं के बारे में सीख रहा हूं। और यहां मेरा प्रश्न है:कॉल करने योग्य <Void> लैम्बडास
लैम्बडा अभिव्यक्तियों के लिए कार्यात्मक इंटरफ़ेस के रूप में Callable<Void>
का उपयोग करने की अनुमति क्यों नहीं है? (कंपेलर वापसी मूल्य के बारे में शिकायत करता है) और यह अभी भी Callable<Integer>
का उपयोग करने के लिए पूरी तरह से कानूनी है। यहां नमूना कोड है:
public class Test {
public static void main(String[] args) throws Exception {
// works fine
testInt(() -> {
System.out.println("From testInt method");
return 1;
});
testVoid(() -> {
System.out.println("From testVoid method");
// error! can't return void?
});
}
public static void testInt(Callable<Integer> callable) throws Exception {
callable.call();
}
public static void testVoid(Callable<Void> callable) throws Exception {
callable.call();
}
}
इस व्यवहार को कैसे समझाया जाए?
यदि आपके पास वापसी मूल्य नहीं है तो आप यहां 'रननेबल' का उपयोग नहीं कर पाएंगे? (मैं अभी तक जावा 8 से परिचित नहीं हूं) – Thilo
@ थिलो: कॉलबल का उपयोग करने का एक लाभ यह है कि यह एक भविष्य लौटाता है, जिसका उपयोग बाद में अन्य उद्देश्यों के लिए किया जा सकता है, जैसे कि एक रन को मारना बहुत लंबा होता है। – devdanke
इसके अलावा कॉल करने योग्य अनचेक अपवाद फेंक सकता है जबकि रननेबल – Greg