powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Правильно ли объявлять getter в interface?
5 сообщений из 5, страница 1 из 1
Правильно ли объявлять getter в interface?
    #38405470
umka_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
public interface EmployeeInfoReader {
  void read(); // читаем из файла
  Map<String, List> getEmployees();
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class EmployeeInfoReaderImpl implements EmployeeInfoReader {

	private Map<String, List> employees;
	
	@Override
	public Map<String, List> getEmployees() {
		return employees;
	}

	@Override
	public void read() {
		try {
                    // читаем файл
                    // заполняем employees
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class EmployeeWorkedTimeCalculator {
    
    private EmployeeInfoReader reader = null;
    private Map<String, List> employees = null;

    public void setReader(EmployeeInfoReader reader)
    {
        this.reader = reader;
    }

    public long calculate()
    {
        employees = reader.getEmployees();
        // посчитали по employees
        return ...;
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
public static void main(String[] args) {
        EmployeeInfoReader reader = new EmployeeInfoReaderImpl();
        reader.read();
        EmployeeWorkedTimeCalculator calculator = new EmployeeWorkedTimeCalculator();
        calculator.setReader(reader);
        calculator.calculate();
}



Собственно, интересуют две вещи:
1. В названии топика
2. Или в main из reader получать employees и передавать в calculator
(тогда reader не нужен в calculator, но клиент будет знать подробности реализации)
Вообще "правильная" ли здесь "архитектура"?
...
Рейтинг: 0 / 0
Правильно ли объявлять getter в interface?
    #38405529
mesier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПравильно ли объявлять getter в interface?
Ну, если ты хотел бы использовать полиморфизм, то да, правильно.
Иначе ты при использовании экземпляра класса будешь вынужден объявлять его конкретную реализацию, а не интерфейс.
Hint: просто попробуй сейчас закоментить геттер в интерфейсе.. Что произойдёт? Какие методы будут видны при объявлении экземпляра через интерфейс?
...
Рейтинг: 0 / 0
Правильно ли объявлять getter в interface?
    #38405561
umka_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mesier,
Ну getter, разумеется, не виден. )

А вопрос №2?
...
Рейтинг: 0 / 0
Правильно ли объявлять getter в interface?
    #38405730
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
umka_maxно клиент будет знать подробности реализации)
- клиент это кто?
Код в main должен быть ровно таким чтобы понимать БЛ верхнего уровня.
Если это парсер, то Понятные строки о парсинге входных данных.
Если это СЭД, то Понятную логику (без внутренностей) о прохождении "утверждения документа".
Ну, и по размеру конечной процедуры в строках...
...
Рейтинг: 0 / 0
Правильно ли объявлять getter в interface?
    #38405752
jdroid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EmployeeWorkedTimeCalculator должен выполнять операции над данными и ему абсолютно незачем знать откуда они появились, может вы их просто захардкодили перед вызовом
да и ридеру незачем знать как вы предпочитаете хранить данные, его задача их прочитать

а читать думаю лучше так
Код: java
1.
2.
3.
public interface Func2<T1, T2, TResult>{
    TResult call(T1 arg1, T2 arg2) throws Exception;
}


Код: java
1.
2.
3.
public interface EmployeeInfoReader {
    void read(Func2<String, List, Void> callback) throws Exception;
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class EmployeeInfoReaderImpl implements EmployeeInfoReader {
    @Override
    public void read(Func2<String, List, Void> callback) throws Exception {
...
        if(callback != null) {
            callback.call(key, value);
        }
...
    }
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    public static void main(String[] args) {
        final Map<String, List> employees = new HashMap<String, List>();
        EmployeeInfoReader reader = new EmployeeInfoReaderImpl();
        try {
            reader.read(new Func2<String, List, Void>() {
                @Override
                public Void call(String key, List value) throws Exception {
                    employees.put(key, value);
                    return null;
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
...
    }
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Правильно ли объявлять getter в interface?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]