#java #object #arraylist
#java #объект #arraylist
Вопрос:
Допустим, у вас разные сотрудники, но у каждого класса employee есть метод salary() . Как я могу заставить эти разные объекты, которые я создал и поместил в ArrayList, использовать метод salary() ?
public void betaalSalarissen(){
for(int counter = 0;werknemers.size()>counter;counter ){
Class objectClass = werknemers.get(counter).getClass();
**objectClass.salaris();** //this won't work, help please!
}
}
public void neemInDienst(Object persoon){ //objects from different classes, different employees
werknemers.add(persoon);
}
Ответ №1:
Нет причин пытаться получить класс; просто используйте полиморфизм.
public class Employee {
public double salaris() { ... }
}
public class CommissionedEmployee extends Employee {
@Override
public double salaris() { ... }
}
List<Employee> employees = new ArrayList<>();
// add some employees of whatever subtype(s)
for (Employee e : employees) {
e.salaris();
}
Комментарии:
1. Я только что попробовал это, и это тоже сработало! Я думаю, что мне просто нужно лучше понять полиморфизм. Спасибо, друг.
Ответ №2:
быстрое решение здесь — привести результат из werknemers.get(counter)``to your
класса Employee` (имя класса только что угадано)
((Employee)werknemers.get(counter)).salaris();
но в конечном итоге вы должны применить общий параметр к переменной коллекции и параметру методов:
private Collection<Employee> werknemers = new ArrayList<>();
public void neemInDienst(Employee persoon){ //objects from different classes, different employees
werknemers.add(persoon);
}
затем вы можете просто перебирать элемент без приведения, как предложил ChiefTwoPencils.