如何处理不同类型的输入和输出?(关于IT技术的问题,无需回答)

3

我有一个非常小且简单的类,但在如何处理它方面却给了我一些问题。

它有一个构造函数和一个单独的获取方法。

其目的是存储值的数组,并在通过获取方法询问时返回这些值。

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

  1. 构造函数应该拆分该字符串并修剪元素以存储属性吗?
  2. 或者构造函数应该只是存储属性,每次调用getter时都应该拆分该属性?
  3. 还是getter应该检查属性,如果它是一个字符串,则拆分它,然后将该值存储在未来对getter的调用中不必再次拆分?
5个回答

5

在构造函数中完成。这样只会被调用一次。如果你在getter方法中完成,那么你就需要多次进行分割操作。


甚至有更加令人信服的原因,而不仅仅是需要多次调用split函数。 - Cruncher

2
假设您至少会调用一次 `get`,则第一种选择更可取。第二种选择的劣势在于您可能需要多次拆分,如果您经常调用 `get`,这可能会对性能产生很大的影响。第三个选项的劣势在于您可能需要有两个变量(一个字符串和一个数组),而其中只有一个会被使用,或者将类型设置为 `Object`,然后该对象将是字符串或数组。这些选项都不是特别好的设计。如果您经常不调用 `get`,或者需要访问原始字符串,则第三个选项可能是合理的(至少从性能角度来看,第一种选择仍然是更好的设计),但如果是这种情况,我会非常担心您的设计。

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

这是我清单上的第三项,但它似乎与迄今为止所有其他答案背道而驰。 - Marty Wallace
如果您不打算使用某个构建物,那么就不应该去构建它,因此在构造函数中拆分字符串基本上需要与此相同数量的工作,只不过在构造函数中是更干净的解决方案。 - Bernhard Barker

1
我将逐一解答以下问题。
  1. 构造函数应该在存储属性之前拆分字符串并修剪元素吗?
  2. 构造函数是否应该仅存储属性,并且每次调用getter时,都应该拆分属性?
  3. getter应该检查属性,如果是字符串,则拆分它,然后存储该值以供将来调用getter而不必......
  1. 采用这种方法时,当创建类时,您可以完成所有初始化工作。这通常是一个好的实践方法,它允许您的类定义(有哪些字段)真正匹配类应该是什么。
  2. 采用这种方法,您的构造函数很简单,但现在您的getter变得复杂了,您的类定义现在不太清晰。您必须在某个地方的注释中解释property.split(",")[4]是某个特定的内容。
  3. 对于像这样的东西,这种逻辑过于复杂。请不要这样做。

总之,对我来说,第一种解决方案似乎是最好的。


0

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


如果是这种情况,我仍然更喜欢在构造函数中拆分字符串,但同时也要存储原始字符串。 - Magnilex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接