如何处理一种类型的输入和另一种类型的输出

时间:2014-01-10 14:12:10

标签: java algorithm design-patterns

我有一个极小而简单的课程,但它在如何最好地处理它方面给我一些问题。

它有一个构造函数和一个get方法。

目的是存储一组值,并在通过get方法询问时返回它们。

此外,值数组可能作为逗号单独的字符串传递给构造函数。这就是我无法决定如何处理事情的地方。

  1. 构造函数是否应该在存储属性
  2. 之前拆分string和trim元素
  3. 如果构造函数只是存储属性,并且每次调用getter时,都应该拆分属性
  4. 如果getter检查属性并且它是否为字符串,则将其拆分然后存储该值以供将来调用getter而不必 ...

5 个答案:

答案 0 :(得分:5)

在构造函数中执行此操作。那只会被召唤一次。如果你在吸气器中这样做,你将不得不多次进行拆分。

答案 1 :(得分:2)

假设您打算至少调用一次get,第一个选项会更好。

第二个选项的缺点是您可能需要多次拆分,如果您经常调用get,可能会造成相当大的性能损失。

第三个选项的缺点是你可能需要有2个变量(一个字符串和一个数组),一次只能使用其中一个变量,或者类型为Object ,然后可以是字符串或数组。这些选项都不是特别好的设计。

如果您经常至少调用get一次,或者您需要访问原始字符串,则第三个选项可能有意义(至少从性能点开始)看来,第一个选项仍然是一个更好的设计),但如果是这种情况,我会非常关注你的设计。

答案 2 :(得分:1)

  
      
  1. 构造函数是否应该在存储属性
  2. 之前拆分string和trim元素   
  3. 如果构造函数只是存储属性,并且每次调用getter时,都应该拆分属性
  4.   
  5. 如果getter检查属性并且它是否为字符串,则拆分它然后存储该值以供将来调用getter而不必...
  6.   

我将逐一解决这些问题。

  1. 使用此方法,您可以在创建类时执行所有初始化操作。这通常是一种很好的做法,它允许你的类定义(有哪些字段)真正匹配类应该是什么。
  2. 使用这种方法,你的构造函数很简单,但是现在你的getter变得复杂了,你的类定义现在还不那么清楚了。你必须在某个地方解释property.split(",")[4]是特定的东西
  3. 对于类似这样的事情,这是一种比需要更复杂的逻辑。请不要这样做
  4. 总之,#1对我来说似乎是最好的解决方案。

答案 3 :(得分:1)

在Joshua Bloch的Effective Java中,你可以读到你应该尽可能地懒惰操作,只在真正需要时做些事情,比如初始化变量等。

所以按照这个建议,我会做这样的事情:

public class Example  {
    private String string;
    private String[] array;

    public Example(String string){
        this.string = string;
    }

    public Example(String[] array){
        this.array = array;
    }

    public String[] getValues(){
        if(this.array == null){
            //Split the string, trim the values
            //create a new array and assign it to the array-variable
            this.string = null; //no need to keep it any longer
        } 
        return this.array;
    }
}

答案 4 :(得分:0)

您应该决定是否需要原始字符串。如果不这样做,那么在构造函数中完成工作是合乎逻辑的选择。