Отказ от ответственности: я сделаю все как можно проще.Нет необходимости инкапсуляции данных, шаблонов, параллелизма или чего-либо еще.Сохраняйте это как можно более простым при изучении основ.
Прежде всего, вам необходимо понять, что вы делаете.
наш учитель хочет, чтобы у нас была переменная, которая рассчитываетвсе количество сотрудников ...
Здесь я вижу класс Department
с методом setEmp
, который, по-видимому, увеличивает число сотрудников при каждом вызове.Я не думаю, что это то, что имел в виду ваш учитель
... во всех созданных объектах в main.
То, что ваш учитель, скорее всего, хочет, чтобы выУ do есть два класса (я полагаю, вы создали Department
по причине):
Employee
, который назначен на
Department
Снова
... подсчитывает все количество сотрудников во всех созданных объектах в основном
Мы можем интерпретировать это двумя способами
- Ваш учитель хочетподсчитать все созданные
Employee
с (как следует из названия вопроса) - Ваш учитель хочет, чтобы вы подсчитали все
Employee
с за Department
Давайте начнем сoption 1
Я пропущу класс Department
, так как он на самом деле не входит в область действия, и я перейду непосредственно к созданному количеству сотрудников .
Что назначенная задача скажет, так это просто подсчитать созданные объекты, что означает созданные Employee
s.
Вот что такое Employee
class может выглядеть как
public class Employee {
// Count of the created employees
public static int count = 0;
// ... Class fields
public Employee(
final Department department,
final String name,
final String surname) {
// ... Assign arguments to class fields
// A new employee has been created. Increment the counter!
++count;
}
...
}
Это статическое поле
public static int count = 0;
увеличивается каждый раз, когда создается новый Employee
.
Вы сможете получить к нему доступ через
final int total = Employee.count;
Теперь, опция 2
Поскольку вам нужно считать Employee
с на Department
, вам нужно увеличить счетчик внутриDepartment
класс.Вот как может выглядеть класс Department
:
public class Department {
private final List<Employee> employees;
private final String name;
public Department(final String name) {
this.employees = new ArrayList<Employee>();
this.name = name;
}
public String getName() {
return name;
}
public List<Employee> getEmployees() {
return employees;
}
public int getEmployeeCount() {
return employees.size();
}
public void addEmployee(final Employee employee) {
employees.add(employee);
}
}
Вы можете видеть, что этому классу принадлежит
- имя
- список назначенныхсотрудники (
private final List<Employee> employees
)
Затем у нас есть класс Employee
, подобный тому, который я описал выше, но следите за изменениями
public class Employee {
// ... Class fields
public Employee(
final String name,
final String surname) {
// ... Assign arguments to class fields
}
...
}
Здесь мы имеемпросто нормальный класс ( Pojo ).Как мы это используем?Следуйте комментариям в коде
public static void main(final String[] args) {
final Department dep1 = new Department("dep1");
dep1.addEmployee(new Employee("Name1", "Surname1"));
dep1.addEmployee(new Employee("Name2", "Surname2"));
final Department dep2 = new Department("dep2");
dep2.addEmployee(new Employee("Name3", "Surname3"));
// Now we have two departments.
// We can retrieve the count of employees for each using
final int dep1Count = dep1.getEmployeeCount();
final int dep2Count = dep2.getEmployeeCount();
// And we can have the total
final int total = dep1Count + dep2Count;
}
Я не включал объекты или темы о синхронизации или параллелизме, так как я думаю, что вы все еще в начале и не должны путаться с этимвещи.