Снова смотрим на локальные переменные. Здесь тоже используется переменная each, которую можно передать в качестве параметра метода. Другая переменная, frequentRenterPoint, до этого не имела значения. Код нового метода не читает ее значения, хотя мы и имеем суммирующее присвоение, передавать эту переменную как параметр метода не нужно.

После извлечения метода, компиляции и запуска тестов, переносим метод в Rental и снова запускаем компиляцию и тесты. Рифэкторинг лучше всего делать небольшими шагами. Так меньше шансов сделать что-то неправильно.

  class Customer...
    public String statement()  {
      double totalAmount = 0;
      int frequentRenterPoints = 0;
      Enumeration rentals = this.rentals.elements();
      String result = "Rental Record for "+getName()+"\n";
      while( rentals.hasMoreElements()) {
        double thisAmount = 0;
        Rental each = ( Rental) rentals.nextElement();

        frequentRenterPoints += each.getFrequentRenterPoints();

        // show figures for this rental
        result += "\t"+each.getMovie().getTitle()+"\t"+
                  String.valueOf( each.getCharge())+"\n";
        totalAmount += each.getCharge();
      }

      // add footer lines
      result += "Amount owned is "+String.valueOf( totalAmount)+"\n";
      result += "You earned "+String.valueOf( frequentRenterPoints)+
                " frequent renter points";

      return result;
    }


  class Rental...
    int getFrequentRenterPoints() {
      if( getMovie().getPriceCode()==Movie.NEW_RELEASE && getDaysRented()>1)
        return 2;
      else
        return 1;
    }

В начало | предыдущая | следующая