الدوال الخاصة في الواجهات
استخرج المنطق المشترك في الواجهات باستخدام الدوال الخاصة.
مقارنة الكود
✕ Java 8
interface Logger {
default void logInfo(String msg) {
System.out.println(
"[INFO] " + timestamp() + msg);
}
default void logWarn(String msg) {
System.out.println(
"[WARN] " + timestamp() + msg);
}
}
✓ Java 9+
interface Logger {
private String format(String lvl, String msg) {
return "[" + lvl + "] " + timestamp() + msg;
}
default void logInfo(String msg) {
IO.println(format("INFO", msg));
}
default void logWarn(String msg) {
IO.println(format("WARN", msg));
}
}
هل ترى مشكلة في هذا الكود؟ أخبرنا.
لماذا يتفوق الأسلوب الحديث
إعادة استخدام الكود
شارك المنطق بين الدوال الافتراضية دون تكرار.
التغليف
تفاصيل التطبيق تظل مخفيةً عن الفئات المُنفِّذة.
واجهات غير مكررة
لا مزيد من النسخ واللصق بين الدوال الافتراضية.
الأسلوب القديم
منطق مكرّر
الأسلوب الحديث
الدوال الخاصة
منذ JDK
9
الصعوبة
متوسط
دعم JDK
الدوال الخاصة في الواجهات
متاح
متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)
كيف يعمل
يسمح Java 9 بالدوال الخاصة في الواجهات مما يُتيح لك مشاركة الكود بين الدوال الافتراضية دون كشف تفاصيل التطبيق للفئات المُنفِّذة.
توثيق ذو صلة