2015-04-06 31 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

是的,你将不得不。单词与特定路径相关联。 –