كيف يمكن للمرء "تجاوز" فئة داخلية في سكالا؟
-
30-09-2019 - |
سؤال
في Scaladoc من تعداد الفئة#VAL ، يمكنني قراءة: "فئة تنفذ نوع القيمة. يمكن تجاوز هذه الفئة لتغيير سلوك تسمية التعداد وتحديد عدد صحيح." أنا في حيرة: كيف يمكنني تجاوز الفصل؟ اشياء مثل override class Val extends super.Val
غير مسموح بها.
المحلول
لا توجد فئات افتراضية في Scala (حتى الآن) ، لذلك لا يمكنك الكتابة override class Val ...
, ، ثم تأكد من التذرع new Val
سوف تختار ديناميكيًا الفئة المناسبة للمثيل الجديد. ما سيحدث بدلاً من ذلك هو أنه سيتم اختيار الفصل بناءً على نوع الإشارة إلى مثيل الفئة المرفقة (في هذه الحالة ، Enumeration
).
الحيلة العامة لمحاكاة الفصول الافتراضية هي الكتابة class Val extends super.Val
, ، ثم تجاوز طريقة محمية تعمل كمصنع لحالات الفصل. في هذه الحالة ، يجب عليك أيضًا تجاوز الطريقة:
protected def Value(i: Int, name: String): Value = new Val(i, name)
Enumeration
سوف يخلق مثيلات من Val
فقط باستخدام طريقة المصنع هذه. بشكل عام ، يتطلب هذا النمط الانضباط من جانب المبرمج ، ولكن يمكن ضمانه من خلال إعلان المُنشئين الخاصين ، مما يجبر المبرمج على استخدام طريقة المصنع.