2016-05-29 51 views
0

我對Java比較陌生,目前我正在編寫一個允許存儲書籍(小說和教科書)的程序。我有一個教科書(Fagbok)和一個小說(Skjønnbok)課程,我有一個班級Books(Bok),其中包括上述書籍的ArrayList。包括一種方法,它將檢查所述書是否已經在列表中。我的問題是;有沒有辦法避免重寫「其他」中的代碼,以避免重複?我可以做第一個if(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 instance ofSkjønnbok)'而不是單獨的if語句? – khelwood

+0

您可以將此代碼提取到私有方法 – Andrew

+4

如果您在book類中正確實現了equals(),那麼您可以使用List.contains()而不需要自己編寫列表迭代代碼。 –

回答

0

您不能在函數中創建函數。 **

在類中創建一個私有方法,並在任何地方調用它,如果它的重複代碼。

**不允許函數內的函數,因爲在函數B中您可能無法編寫完整的函數A,但請記住functional programming in Java 8是哪種啓用此功能的函數。

+2

這個答案可以作爲Java新手的建議,但在形式上是錯誤的。您可以在函數中定義Command對象和lambda函數。 –

+0

@HubertGrzeskowiak答案是特定於這個問題。是的,Java 8支持函數式編程。(回答編輯) –

0

你總是按照他們的類型和標題來比較書籍嗎?如果是這樣,請在Book中實施equals方法。否則,你可能想使用一個comparator,它基本上是一個包含比較邏輯的類。你可以有多個這樣的比較器類,稍後將它們切換到列表容器類中。

相關問題