Стоит ли создавать другой метод для упрощения методов, которые повторяются?

#java

#java

Вопрос:

В моем коде есть несколько общедоступных методов, которые все одинаковы :

 public boolean modifyLastName(int nth, String lastName) {

    if (!isNthValid(nth)) {
        return false;
    }

    if (lastName.length() == 0) {
        return false;
    }

    int count = 0;
    for (int i = 0; i < book.length; i  ) {
        if (book[i] != null) {
            count  ;

            if (count == nth) {
                book[i].setLastName(lastName);
                return true;
            }
        }
    }

    return false;
}
 

Кроме очевидного заголовка, где у меня есть «modifyLastName», мои 4 метода идентичны, за исключением setLastName(lastName) тех случаев, когда это было бы по-другому setTitle(title) , setDate(date) .

Я рассматриваю возможность внедрения нового метода для передачи информации, но я просто не вижу, как это поможет сократить код, а также убедиться, что в будущем я смогу обновить один метод, если это необходимо, и обо всем позаботятся.

Комментарии:

1. Мы не можем сказать вам, будет ли это «стоить того». Это вопрос мнения … и сильно зависит от контекста.

Ответ №1:

Вы могли бы сделать это, что означает, что вам не нужно повторять код поиска в книге: (что было бы намного проще, если бы у вас не было нулей в вашем массиве. Следует ли вместо этого использовать список?)

     public boolean modifyLastName(int nth, String lastName) {
        return updateBook(nth, b -> b.setLastName(lastName), lastName.length() != 0);
    }
    
    private boolean updateBook(int nth, Consumer<Book> operation, boolean valid) {
        if (!isNthValid(nth)) {
            return false;
        }

        if (!valid) {
            return false;
        }

        int count = 0;
        for (int i = 0; i < book.length; i  ) {
            if (book[i] != null) {
                count  ;

                if (count == nth) {
                    operation.accept(book[i]);
                    return true;
                }
            }
        }

        return false;
    }
 

Комментарии:

1. Спасибо за это. Я не знал о потребительском интерфейсе. Я провел кое-какие исследования и узнал кое-что новое.