2016-05-29 2 views
0

Я относительно новичок в Java, и сейчас я пишу программу, которая позволит хранить книги (Художественная литература и учебники). У меня есть класс для учебников (Fagbok) и один для художественной литературы (Skjønnbok), и у меня есть класс Books (Bok), который включает ArrayList из вышеупомянутых книг. Включен метод, который будет проверять, включена ли указанная книга в список. Мой вопрос: есть ли способ избежать переписывания кода в «else», чтобы избежать дублирования? Могу ли я сделать первый, если (sjekkBok ......) метод, который будет использоваться позже в том же методе?Есть ли способ создать локальный метод в методе, чтобы избежать дублирования кода?

public Boolean eksisterer(Bok sjekkBok){ 
    boolean funnet = false; 
    for(Bok bok : bøker){ 
     if(sjekkBok instanceof Fagbok){ 
      if(sjekkBok.getTittel().equals(bok.getTittel())){ 
       funnet = true; 
       break; 
      } 
     } 
     else{ 
      if(sjekkBok instanceof Skjønnbok){ 
       if(sjekkBok.getTittel().equals(bok.getTittel())){ 
        funnet = true; 
        break; 
       } 
      } 
     } 
    } 
    return funnet; 
} 

Извините, если это немой вопрос. Не удалось найти ответы в Интернете.

+3

Почему бы просто не использовать 'if (sjekkBok instanceof Fagbok || sjekkBok instanceof Skjønnbok)' вместо отдельных операторов if? – khelwood

+0

вы можете вытащить этот код для частного метода. – Andrew

+4

Если вы правильно выполняете 'equals()' в своем классе книги, вы можете просто использовать 'List.contains()' и не нужно писать код итерации списка самостоятельно , –

ответ

0

Вы не можете создавать функции внутри функций. **

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

** Функции внутри функций не допускаются, так как в них вы не можете написать полную функцию A с функцией B, но имейте в виду, что есть functional programming in Java 8, который разрешает это.

+2

Этот ответ в порядке, как совет для новичка Java, но формально неправильный. Вы можете определить объекты Command и лямбда-функции в функциях. –

+0

@HubertGrzeskowiak ответ специфичен для этого вопроса. И да функциональное программирование поддерживается в java 8. (ответ отредактирован) –

0

Вы всегда сравниваете книги по их типу и названию? Если это так, выполните метод equals в Book. В противном случае вы можете использовать comparator, который в основном является классом, который содержит логику сравнения. Вы можете иметь несколько таких классов-компараторов и позже включать их в свой класс контейнера списка.

Смежные вопросы