Ես Java-ում նոր եմ և փորձում եմ ստեղծել մի քանի իսկապես պարզ java հավելվածներ: Իմ փորձերում ես ընդհանրացման խնդիր եմ ունեցել: Ես ունեմ Person օբյեկտների ցանկ: Անձը կարող է լինել Հայր կամ Մայր:
Այնուհետև ես ունեմ նույն անունով մի քանի մեթոդ eat(...), բայց դրանք տարբերվում են մուտքային պարամետրերով: Այս մեթոդները Person դասի մաս չեն: Այս մեթոդներից մեկն ընդունում է Մայրը որպես պարամետր, իսկ մյուսը ընդունում է Հայրը:
Հարցն այն է, թե ինչպես դինամիկ կերպով որոշել, թե որ մեթոդն է կանչել անձի ցանկում: երբ ես փորձում եմ կրկնել ցուցակը և զանգահարել o.eat(iterator), այն հուշում է կոմպիլյատորի սխալ, քանի որ iterator-ը Person տեսակի է, բայց իմ eat մեթոդները ցանկանում են որպես պարամետր Մայր կամ Հայր: Կազմողը չգիտի, որ ես մեթոդ ունեմ յուրաքանչյուր տեսակի անձի համար
Մինչ այժմ ես լուծել եմ իմ խնդիրը if հայտարարության հետ, որտեղ ես համեմատում եմ դասի տեսակը GetType() մեթոդով և Mother և հետ: Հայր և եթե դա հավասար է, ես կարող եմ Անձին ընտրել համապատասխան տեսակի մեջ:
Կոդն ունի հետևյալ տեսքը.
if (person.getClass().equals(Father.class)) {
theView.eat((Father) person);
}
if (person.getClass().equals(Mother.class)) {
theView.eat((Mother) person);
}
Սնվելու մեթոդը հետևյալն է.
public void eat(Mother m){
textArea.append(m.breakfast);
textArea.append(m.lunch);
textArea.append(m.dinner);
}
ճաշ ընթրիքն ու նախաճաշը ընդամենը մի շարք են, որոնք ցույց են տալիս, թե ինչ է անում մարդը
անձը կոդը կրկնող է Անձի օբյեկտների ցանկի միջոցով
Կա՞ ավելի լավ լուծում, որը կավտոմատացնի գործընթացը:
Thx նախապես.
eat()
-ը կարիք չունի իմանալու, թե կոնկրետ որ տեսակն է փոխանցված, բացառությամբ այնPerson
տեսակի: Տես վերը նշված փոփոխված կոդը՝ հասկանալու համար, թե ինչ նկատի ունեմ: 29.04.2016eat()
մեթոդը, որպեսզի ես կարողանամ օգնել ձեզ: Ես պարզապես կռահում եմ, թե ինչ եք անում դրանում: 29.04.2016getMeals()
), որը կարող է ձեզ պատկերացում տալ, թե ինչ եմ մտածում: Սա լավագույն լուծումը չէ, քանի որgetMeals()
մեթոդը կարող է պարունակել կրկնօրինակ կոդ: Բայց դա կարող է օգնել ձեզ հեռացնելif-else
չեկերը: Օգտատեր @Brandon-ը ձեզ տվել է լավագույն պատասխանը (այցելուի օրինակը), կարծում եմ: 30.04.2016Person
-ից բոլոր դաշտերը փոխարինեքpublic enum Meal { BREAKFAST, LUNCH, DINNER; }
-ով և համապատասխանաբար փոխեքgetMeals()
մեթոդը, կոդը մի փոքր ավելի մաքուր կլինի: 30.04.2016