Это немедленно вызывает подозрение, что метод находится в неправильном классе. В большинстве случаев метод должен находиться в том классе, чьи данные он использует. Таким образом наш метод должен быть перенесен в Rental. Чтобы это сделать я использую рифэкторинг Move Method (142). С ним вы копируете все в Rental, приводите в порядок на новом месте и компилируете.
  class Rental...
    public double getCharge() {
      double result = 0;
      switch( getMovie().getPriceCode()) {
        case Movie.REGULAR:
          result += 2;
          if( getDaysRented()>2)
            result += ( getDaysRented()-2)*1.5;
          break;

        case Movie.NEW_RELEASE:
          result += getDaysRented()*3;
          break;

        case Movie.CHILDRENS:
          result += 1.5;
          if( getDaysRented()>3)
            result += ( getDaysRented()-3)*1.5;
          break;
      }
      return result;
    }
В данном случае, приведение в порядок означает удаление параметра. Заодно я переименовал метод.

Теперь можно убедиться, что новый метод работает. Для этого мы заменим тело Customer.amountFor, чтобы вызвать новый метод.

  class Customer...
    private double amountFor( Rental aRental) {
      return aRental.getCharge();
    }
Теперь можно компилировать и запускать тесты, чтобы убедиться, что ничего не сломалось.
В начало | предыдущая | следующая