Получить определенное значение из метода Setter и Getter внутри методов Chaining с использованием Java - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь получить конкретное значение из метода setter, используя цепочку метода java.например, если мы делаем obj.setId (1) .setValue (5).как мы можем получить значение = 5, используя obj.setId (1) .getValue ();

вот основной класс

public class MenuDish {

    private String name;
    private double price;
    private String description;
    private int category;
    private  int spiciness;
    private boolean healthy;

    public MenuDish(){ //constrcutor

    }

    public MenuDish setPrice(double price){

        if(price < 0.0){
            this.price = 0.0;
        }
        else{
            this.price = price;
        }
        return this;
    }
    public double getPrice() {
        return this.price;
    }

    public MenuDish setDay(int day){

    return new MenuDish();//just do nothing 
}

}

Подкласс

Класс AdjustableMenuDish

public class AdjustableMenuDish extends  MenuDish {
    private int day;
    private double price;

        public AdjustableMenuDish(){ //constructor
        setName(null);
        setPrice(0);
        setDescription(null);
        setCategory(0);
        setHealthy(false);
        setSpiciness(0);
    }

    @Override
    public MenuDish setDay(int day){

        this.day = day;
        return this;
    }

}

Внутри основного метода я пытаюсь сделать что-то подобное.

AdjustableMenuDish dish = new AdjustableMenuDish();
dish.setDay(0).setPrice(3.4);
dish.setDay(3).setPrice(7.4);
System.out.println(dish.setDay(0).getPrice());//--->output 7.4 but how to
get 3.4 instead of 7.4

В основном я пытаюсь получить конкретную цену за день.

Редактировать

Я хочу пройти тестовый пример Junit, который приведен ниже

@Test public void test_daily_prices() {
      AdjustableMenuDish dish = new AdjustableMenuDish();
      for (int i = MenuDish.MONDAY; i <= MenuDish.SUNDAY;  i++) {
          double p = 1.0+i;

          double a = dish.setDay(i).setPrice(p).getPrice();

          assertEquals(p, a, 0.0001);
     }

      for (int i = MenuDish.MONDAY; i <= MenuDish.SUNDAY;  i++) {
          double p = 1.0+i;
          double a = dish.setDay(i).getPrice();
          assertEquals(p, a, 0.0001);
      }
  }

Ожидается сбой 1,0, но было 7,0

1 Ответ

0 голосов
/ 10 октября 2018

Вам нужно объединить дни и цены вместе, а не указывать их как отдельные атрибуты MenuDish.Вы можете попробовать что-то вроде:

class AdjustableMenuDish {
    private double[] prices = new double[7]; // Assumes day as [0..6]
    ...
    public AdjustableMenuDish setPrice(int day, double price) {
        prices[day] = price;
        return this;
    }
    public double getPrice(int day) {
        return prices[day];
    }
}

Если каждое блюдо имеет разную цену в зависимости от дня, тогда этот код может быть в MenuDish.Если это всего лишь несколько блюд, то, вероятно, это относится к AdjustableMenuDish.

. Учитывая, что цена действительно цена в день , я думаю, вы должны представитьдва вместе, т.е.в одном методе (как указано выше).Если вы действительно хотите придерживаться своего MenuDish API, как сейчас, тогда вы можете попробовать что-то вроде следующего.Это отслеживает текущий день.

class MenuDish {
    private double[] prices = new double[7]; // Assumes day as [0..6]
    private int day;
    ...
    public MenuDish setDay(int day) {
        this.day = day;
        return this;
    }
    public MenuDish setPrice(double price) {
        prices[day] = price;
        return this;
    }
    public double getPrice() {
        return prices[day];
    }
}
...