Сеттер в интерфейсе и объектах в массив - PullRequest
0 голосов
/ 28 мая 2018

У меня небольшие проблемы с пониманием двух маленьких задач.Я стараюсь быть конкретным, насколько могу, но я должен все перевести с немецкого, так что имейте это в виду.Задача состоит в том, чтобы запрограммировать своего рода «обучающую игру», в которой вы можете создавать обучающие сессии и так далее.Моя первая задача - реализовать интерфейс, который заполнен тремя разными методами:

  • void setCaloryGoal (int caloryGoal) -> устанавливает caloryGoal
  • int getCaloryGoal -> возвращает caloryGoal
  • double getAchievementDegree -> возвращает степень достижения (burnedcalories / caloryGoal)

Чем нам нужно реализовать новый класс TrainingsessionWithGoal, где вы используете конструктор суперкласса Trainingsession, но выЯ должен добавить caloryGoal, и я понятия не имею, как я могу реализовать его из интерфейса (я уверен, что мы должны реализовать его с помощью метода set. Мой текущий код такой:

public TrainingsessionWithGoal(int trainingtime, Fitnessdevice fitnessdevice, int day, int month, int year, int hh, int mm, int caloryGoal) {
    super(trainingtime, fitnessdevice, day, month, year, hh, mm);
    this.caloryGoal = caloryGoal;
}

Это полностью работает, но я уверен, что способ, которым я реализовал caloryGoal, не правильный, потому что я никогда не использую метод set из интерфейса. У кого-нибудь есть идея для этого?

В другой задаче нам нужно создать новый класс TrainingProgramm, в котором мы реализуем массив, заполненный различными объектами класса.Trainingsession и новый класс TrainingsessionWithGoal) и там я абсолютно не представляю, как обрабатывать.Я гуглил все, но не мог найти то, что мне помогло.

Это то, что я имею до сих пор:

private ArrayList <Objects> list = new ArrayList <Objects> ();

public TrainingProgramm (String programmName, ArrayList<Objects> list) {
    this.programmName = programmName;
    this.list = list;
}

, но это, очевидно, не работает.Было бы очень полезно, если бы кто-то мог направить меня на правильный путь.

1 Ответ

0 голосов
/ 29 мая 2018

Вы можете, как предложил Лино, изменить ArrayList<Object> to ArrayList<? extends Trainingsession>.Еще лучше вы используете свой интерфейс (как бы его ни называли) для этого.И тип поля и параметр метода должны быть List, а не ArrayList.И они должны быть названы правильно - вместо списка дать им больше семантических имен.Таким образом, вы бы получили что-нибудь.как это:

private List<YourInterface> sessions = new ArrayList <YourInterface> ();
public TrainingProgramm (String programmName, List<TrainingSessionInterface> sessions) { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...