لا يمكن العثور على رمز الرمز:عملية الطريقة (WorkerAnt)

StackOverflow https://stackoverflow.com/questions/5985942

  •  12-11-2019
  •  | 
  •  

سؤال

أنا أقوم بمشروع AntFarm هذا لفصل Java الخاص بي.يتكون هذا المشروع من فئات مختلفة (Food، WorkerAnt، Queen) ويتفاعلون مع بعضهم البعض باستخدام واجهة (بطريقة تسمى العملية).

http://ljhs.sandi.net/faculty/volger/apajava/GridWorld/Assignments/AntFarm/ - مشروع

أنا عالقة حاليا على processActors() طريقة في WorkerAnt.(يوجد في أسفل الصفحة تقريبًا).

الكود الحالي هو التالي:

public void processActors(ArrayList<Actor> actors) {
  for (Actor nextActor : actors) {
    nextActor.process(this); 
  }
}

الخطأ الذي أحصل عليه هو ما يلي.

لا يمكن العثور على رمز الرمز:عملية الطريقة (WorkerAnt)

هل كانت مفيدة؟

المحلول

من خلال المهمة المرتبطة ، Actor لا يملك process(WorkerAnt) طريقة.

بدلا من ذلك، هذا جزء من Processable واجهة (وبالتالي Food).

على هذا النحو، تأكد من الخاص بك Actor هو Actor تنفيذ Processable (على سبيل المثال أ Food).

من الناحية المثالية، يمكنك تغيير الخاص بك processActors(ArrayList<Actor> actors) طريقة لتكون شيئا من هذا القبيل processProcessables(ArrayList<Processable> processables).

ومع ذلك، أرى في المهمة أنه مطلوب منك تنفيذ ملف processActors(ArrayList<Actor> actors) لذلك لا يمكنك فعل هذا حقًا (على الرغم من أنني سأصف هذا بأنه تصميم سيء - فهو يشبه وجود طريقة divide(object, object) بدلاً من divide(double, double)).

تقول المهمة: لمعرفة سبب سوء التصميم

الجهات الفاعلة في العملية:يحتاج كل ممثل في الجهات الفاعلة إلى استدعاء طريقة عمليته.

يستثني Actorليس لديك process طُرق - Processableافعل و Actorليست كذلك Processable.

في أي حال، سيتعين عليك قبول حقيقة أنك تتوقع بعض الشيء Actorليكون Processableق وافعل شيئًا مثل هذا:

for(Actor nextActor : actors)
{
    if (nextActor instanceof Processable)
        ((Processable)nextActor).process(this); 
}

ومع ذلك، كان يجب أن تدرك هذا من خلال المهمة:

يمكن أن يكون الممثل ملكًا أو كعكة أو ملف تعريف ارتباط أو عامل.بدون الواجهة القابلة للمعالجة ، ستحتاج عمليات العمليات إلى تحديد نوع الممثل ثم إيقاف مرجع الممثل قبل إجراء مكالمة للمعالجة.ولكن نظرًا لأن كل فئة من هذه الفئات تنفذ قابلاً للمعالجة ، فإن العمليات تحتاج فقط إلى إلقاء الممثل على معالجته قبل المكالمة.يُسمح بهذه المعالجة المتعددة الأشكال لأن المعالجة تحتوي على طريقة تجريدية العملية.تحدد بيئة وقت تشغيل Java (JRE) النوع الفعلي للكائن في وقت التشغيل ويستدعي طريقة العملية المناسبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top