Итак, чтобы объяснить свой код ->Аннотация добытчики класса и сеттера в Java
У меня есть абстрактный класс типа Employee, у него есть свои собственные поля, такие как имена.
У меня есть классы Admin, Sales и Manager, которые распространяются от Employee. каждый из них имеет свои собственные поля, такие как fixedBonus для администратора, percentBonus для продаж и администратор сотрудников для менеджера.
У меня тогда есть класс водителя, который содержит ArrayList of Employees, поэтому он содержит админов, продавцов и менеджеров.
Моя проблема возникает с элементами Arraylist. Скажем, я получаю сотрудника класса Admin из ArrayList и пытаюсь добраться до своего поля fixedBonus с помощью getter getFixedBonus(), я просто не могу. Как я могу это сделать, чтобы использовать класс-получатели и сеттеры, а не только унаследованные? Вот копия моего кода, в котором возникает проблема. Конкретно проблема заключается в случаях 5 и 6 инструкции switch.
private Employee editAnEmployee(Employee emp) {
boolean exit = false;
boolean validChoice = false;
int choice = 0;
Boolean sure = false; // used in the switch statement
String newName;
double newValue;
Employee admin = new AdminWorker("0", "0", 0, 0, 0); // these are used
Employee sales = new SalesWorker("0", "0", 0, 0, 0, 0); // to check the
Employee manager = new Manager("0", "0", 0, 0); // class of the
// employee
// being sent
// in, to edit
// the fields
// the employee
// may hold
do {
do {
validChoice = true;
emp.toString();
StdOut.println("Which field would you like to edit?");
StdOut.println("1) First Name.");
StdOut.println("2) last Name.");
StdOut.println("3) Hourly rate.");
StdOut.println("4) Hours worked in the last week.");
if (emp.getClass().equals(admin)) {
StdOut.println("5) Fixed Bonus.");
} else if (emp.getClass().equals(sales)) {
StdOut.println("5) Percentage bonus on sales.");
StdOut.println("6) Value of sales made in the last week.");
} else if (emp.getClass().equals(manager)) {
StdOut.println("5) Department.");
}
StdOut.println("0) Exit.");
choice = StdIn.readInt();
if (choice < 0 || choice > 4) {
if (emp.getClass().equals(admin) && choice <= 5) {
validChoice = true;
} else if (emp.getClass().equals(sales) && choice <= 6) {
validChoice = true;
} else if (emp.getClass().equals(manager)) {
validChoice = true;
} else {
StdOut.println("You entered an invalid number! Try Again...");
validChoice = false;
}
}
} while (!validChoice);
switch (choice) {
case 0:
StdOut.println("You are now exiting...");
exit = true;
break;
case 1:
StdOut.println("The employees first name is: " + emp.getFirstName() + ". What would you like the first name to be now?");
newName = StdIn.readString();
StdOut.println("Are you sure you want to change " + emp.getFirstName() + " to " + newName +"?(y/n)");
sure = ynChoice();
if(sure) emp.setFirstName(newName);
break;
case 2:
StdOut.println("The employees last name is: " + emp.getLastName() + ". What would you like the last name to be now?");
newName = StdIn.readString();
StdOut.println("Are you sure you want to change " + emp.getLastName() + " to " + newName +"?(y/n)");
sure = ynChoice();
if(sure) emp.setLastName(newName);
break;
case 3:
StdOut.println("The employees hourly rate is: " + emp.getHourlyRate() + ". What would you like the hourly rate to be now?");
newValue = StdIn.readDouble();
StdOut.println("Are you sure you want to change " + emp.getHourlyRate() + " to " + newValue +"?(y/n)");
sure = ynChoice();
if(sure) emp.setHourlyRate(newValue);
break;
case 4:
StdOut.println("The employee has worked: " + emp.getHoursWorked() + " hours in the last week. What would you like that to be now?");
newValue = StdIn.readDouble();
StdOut.println("Are you sure you want to change " + emp.getHoursWorked() + " to " + newValue +"?(y/n)");
sure = ynChoice();
if(sure) emp.setHoursWorked(newValue);
break;
case 5:
if (emp.getClass().equals(admin)) {
StdOut.println("The employees fixed bonus is: " + emp.getFixedBonus() + ". What would you like that to be now?");
newValue = StdIn.readDouble();
StdOut.println("Are you sure you want to change " + emp.getFixedBonus() + " to " + newValue +"?(y/n)");
sure = ynChoice();
if(sure) emp.setHoursWorked(newValue);
} else if (emp.getClass().equals(sales)) {
StdOut.println("The employees percentage bonus is: " + emp.getPercentageBonus() + ". What would you like that to be now?");
newValue = StdIn.readDouble();
StdOut.println("Are you sure you want to change " + emp.getPercentageBonus() + " to " + newValue +"?(y/n)");
sure = ynChoice();
if(sure) emp.setHoursWorked(newValue);
} else if (emp.getClass().equals(manager)) {
StdOut.println("The employees fixed bonus is: " + emp.getFixedBonus() + ". What would you like that to be now?");
newValue = StdIn.readDouble();
StdOut.println("Are you sure you want to change " + emp.getFixedBonus() + " to " + newValue +"?(y/n)");
sure = ynChoice();
if(sure) emp.setHoursWorked(newValue);
}
break;
case 6:
StdOut.println("The employees sales in the last week are: " + emp.getLastWeeksSales() + ". What would you like that to be now?");
newValue = StdIn.readDouble();
StdOut.println("Are you sure you want to change " + emp.getLastWeeksSales() + " to " + newValue +"?(y/n)");
sure = ynChoice();
if(sure) emp.setHoursWorked(newValue);
break;
}
} while (!exit);
return emp;
}
Не могли бы вы просто сделать «абстрактный» класс сотрудников абстрактными методами получения? Таким образом, классы, расширяющие класс Employee, должны определять собственное поведение геттера. –
Включите объект в подходящий тип. ((AdminWorker) emp) .getFixedBonus() – dnault