2016-05-29 5 views
0

Ich bin relativ neu in Java und schreibe gerade ein Programm, das die Speicherung von Büchern (Fiktion und Lehrbücher) ermöglicht. Ich habe eine Klasse für Textbuch (Fagbok) und eine für Fiktion (Skjønnbok), und ich habe eine Klasse Books (Bok), die eine ArrayListe der oben erwähnten Bücher enthält. Enthalten ist eine Methode, die überprüft, ob das Buch bereits in der Liste ist. Meine Frage ist; Gibt es eine Möglichkeit, das Umschreiben des Codes in "else" zu vermeiden, um Doppelungen zu vermeiden? Könnte ich das erste machen, wenn (sjekkBok ......) eine Methode später in der gleichen Methode verwendet werden soll?Gibt es eine Möglichkeit, eine lokale Methode in einer Methode zu erstellen, um doppelten Code zu vermeiden?

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; 
} 

Entschuldigung, wenn es eine dumme Frage ist. Konnte keine Antworten online finden.

+3

Warum nicht einfach 'if (sjekkBok instanceof Fagbok || sjekkBok instanceof Skjønnbok)' anstelle von separaten if-Anweisungen? – khelwood

+0

Sie können diesen Code zu einer privaten Methode herausziehen – Andrew

+4

Wenn Sie 'equals()' in Ihrer Buchklasse richtig implementieren, können Sie einfach 'List.contains()' verwenden und müssen den Listeniterationscode nicht selbst schreiben . –

Antwort

0

Sie dürfen keine Funktionen innerhalb von Funktionen erstellen. **

Erstellen Sie eine private Methode in der Klasse und rufen Sie sie überall auf, wenn es sich wiederholenden Code.

** Funktionen innerhalb von Funktionen sind nicht erlaubt, da Sie möglicherweise keine vollständige Funktion A mit einer Funktion B schreiben, aber denken Sie daran, dass es functional programming in Java 8 gibt, welche Art von aktiviert dies.

+2

Diese Antwort ist in Ordnung als ein Tipp für einen Java-Neuling, aber formal falsch. Sie können Befehlsobjekte und Lambda-Funktionen in Funktionen definieren. –

+0

@ HubertGrzeskowiak die Antwort ist spezifisch für diese Frage. Und ja, funktionale Programmierung wird in Java 8 unterstützt. (Antwort bearbeitet) –

0

Vergleichen Sie Bücher immer nach Typ und Titel? Wenn ja, implementieren Sie die equals Methode in Book. Andernfalls möchten Sie möglicherweise eine comparator verwenden, die im Grunde eine Klasse ist, die die Vergleichslogik enthält. Sie können mehrere solcher Vergleichsklassen haben und sie später in Ihrer Listencontainerklasse wechseln.

Verwandte Themen