Нужно код менеджера и сотрудника классов.Как сделать их «видимыми» друг другу, не нарушая инкапсуляцию? - PullRequest
0 голосов
/ 12 февраля 2019

Классы Manager и Employee являются подклассами EnterpriseMember.Как мне написать метод «getManager» (который возвращает экземпляр Manager, у которого этот Employee есть в списке отчетов) для класса Employee?Заранее спасибо!

public class Manager extends EnterpriseMember {

    /*Fields */
    private List reports = new ArrayList();

    /*Constructor */
    public Manager(String name){
        super(name);
    }

    /*Methods */
    public void addReport(Employee employee){            
        reports.add(employee);
    }// How can "employee" know it is in this List?

}

public class Employee extends EnterpriseMember {

    /*Constructor */
    public Manager(String name){
        super(name);
    }

    /*Methods */
    public Manager getManager(){            
        return ???;
    }

}

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Обычно объект с разными атрибутами выглядит так:

public class Employee extends EnterpriseMember {

    private Manager manager;
    private String name; // You probably don't need this because you defined it in the Superclass.
    .
    .
    .

    /*Constructor */
    public Employee(String name){
        super(name);
    }

    /*Methods */
    public Manager getManager(){            
        return manager;
    }

    public void setManager(Manager manager){            
        this.manager = manager
    }

    // Other getters and setters for the attributes.

}
0 голосов
/ 12 февраля 2019

Примерно так:

public class Manager {

    private List<Employee> reports = new ArrayList<Employee>();

    public void addReport(Employee e) {
        if (e != null) {
            this.reports.add(e);
            e.setManager(this);
        }
    }
}

public class Employee {

    private Manager manager;

    public void setManager(Manager m) {
        if (m != null) {
            this.manager = m;
        }
    }
}

На всякий случай, если неясно, вам следует добавить все остальные методы, которые вам нужны.Я только продемонстрировал, как обновить ссылку Manager в Employee, когда она добавляется к List прямых отчетов.

У вас также должен быть метод removeReport, который удаляет Employee изList и устанавливает Manager на null.

Как вы собираетесь найти Employee в этом List?По имени?Идентификатор сотрудника?Подсказка: подумайте о правильном переопределении equals и hashCode для ваших классов.

Не Managers также Employees?У боссов нет боссов?Это иерархия, дерево.

...