#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. Спасибо за это. Я не знал о потребительском интерфейсе. Я провел кое-какие исследования и узнал кое-что новое.