2015-04-06 28 views
1

使用getter一類我有讀取一個文件轉換成格式的類我想:當返回一個值或Java中

public class ProgramReader { 

    public List<String> readFromFile(String path){ 
     List<String> commands = null; 
     try { 
      commands = Files.lines(Paths.get(getClass().getResource(path).toURI())) 
        .map(line -> line.split("\\s+")).flatMap(Arrays::stream) 
        .collect(Collectors.toList()); 
     } catch (IOException e) { 
      System.err.println(e.getMessage());; 
     } catch (URISyntaxException e) { 
      e.printStackTrace(); 
     } 

     return commands; 

    } 
} 

我傳遞的路徑作爲參數(而不是通過構造函數),因爲,我不想實例化每次我改變路徑。但是我對於返回結果感到困惑?我是否應該將其存儲到類成員中,然後使用getter方法來訪問結果?或者這個班級是否高效?

+0

這要看情況。你試圖達到什麼目的? – Arlind

+0

我沒有看到任何問題,除了這個方法似乎並不涉及實例(這更多的是個人厭惡而不是實際的缺陷)。至於存儲在一個字段var,這取決於你的應用程序需要什麼 –

+0

我想知道這實際上是否適用於面向對象的概念。這裏我只是封裝了一個函數。但是,那好嗎? –

回答

1

從您提供的代碼示例中,在不保存數據的情況下返回值時應該沒有問題 - 前提是您不必多次訪問相同的值。如果您必須多次訪問相同的值,保存結果確實是一個好主意。

基本上我可以看到三種方式這可以去:

  1. 你(通常)不需要訪問相同的值不止一次。不要保存結果,甚至可以使用方法static
  2. 您經常需要訪問最後一個值。在這種情況下,將其保存到私人成員並添加一個吸氣劑。
  3. 您經常需要訪問之前的結果,但不一定是最後的結果。此外,該方法是不可知的(=相同的輸入總是導致相同的輸出),或者如果它不是不相關的。然後將結果保存爲Map,並將路徑作爲關鍵字。
+0

非常感謝。這是有道理的。 –

0

在這裏,每次調用readFromFile時,都會實際讀取文件。

的另一種選擇是保持其結果,爲了不再次讀取該文件,如果該方法被多次調用:

public class ProgramReader { 

    private String path; 
    private List<String> words = null; 

    public ProgramReader(String path) { 
     super(); 
     this.path = path; 
    } 

    public List<String> getWords() { 
     if(words == null) { 
      words = readFromFile(); 
     } 
     return words; 
    } 

    private List<String> readFromFile() { 
     // ... 
    } 

} 
+0

我是否必須通過構造函數傳遞路徑。然後,我不必每次路徑更改時都實例化一個新對象? –

+0

是的,你將不得不。單詞與特定路徑相關聯。 –