يرجى الإجابة على السؤال التالي.

عنوان السؤال: كيف تعرف Java الطريقة المثقلة للاتصال بتعبيرات لامدا؟ (المورد، المستهلك، القابل للاستدعاء، ...)

نص السؤال: أولاً، ليس لدي أي فكرة عن كيفية صياغة السؤال بشكل لائق، لذا فهذا الأمر متروك للاقتراحات.

لنفترض أننا اتبعنا أساليب مثقلة:

تنفيذ باطل (قابل للاستدعاء) {
 يحاول {
 callable.call();
 } قبض (الاستثناء ه) {
 printStackTrace();
 }
}

 تنفيذ T (المورد المورد) {
 إرجاع المورد.get();
}

تنفيذ باطل (قابل للتشغيل قابل للتشغيل) {
 runnable.run();
}
الخروج من هذا الجدول، حصلت على سؤال SO آخر

المورد () -> س
المستهلك س -> ()
مستهلك ثنائي x، y -> ()
قابل للاستدعاء () -> x يلقي على سبيل المثال
قابل للتشغيل () -> ()
الدالة س -> ص
وظيفة ثنائية x,y -> z
المسند x -> منطقي
المشغل الأحادي x1 -> x2
مشغل ثنائي x1,x2 -> x3
هذه هي النتائج التي أحصل عليها محليًا:

// Runnable -> متوقع لأن هذا فراغ عادي
تنفيذ(() -> System.out.println());

// قابل للاستدعاء -> لماذا ليس موردًا؟ ولا يضع أي استثناءات..
تنفيذ (() -> فارغ)؛

// المورد -> يؤدي هذا إلى إرجاع كائن، ولكن كيف يختلف ذلك عن إرجاع القيمة الخالية؟
تنفيذ (() -> كائن جديد ())؛

// قابل للاستدعاء -> لأنه يمكنه طرح استثناء، أليس كذلك؟
تنفيذ (() -> {رمي استثناء جديد ()؛})؛
كيف يعرف المترجم الطريقة التي يجب الاتصال بها؟ كيف يمكن على سبيل المثال التمييز بين ما هو قابل للاستدعاء وما هو قابل للتشغيل؟
{"source": "ewof/sharegpt-instruct-unfiltered-deduped", "kind": "human", "evolved_from": null}