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

Java 如何处理一种类型的输入和另一种类型的输出,java,algorithm,design-patterns,Java,Algorithm,Design Patterns,我有一个非常小和简单的类,但它给了我一些问题,如何最好地处理它 它有一个构造函数和一个get方法 其目的是存储一个值数组,并在通过get方法请求时返回它们 此外,值数组可以作为逗号分隔的字符串传递给构造函数。这就是我无法决定如何处理事情的地方 构造函数应该在存储属性之前拆分字符串和trim元素吗 如果构造函数只是存储属性,并且每次调用getter时,都应该拆分属性 getter是否应该检查属性,如果是字符串,则将其拆分,然后存储该值,以便将来调用getter时不必这样做 在构造函数中执行此操作

我有一个非常小和简单的类,但它给了我一些问题,如何最好地处理它

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

其目的是存储一个值数组,并在通过get方法请求时返回它们

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

  • 构造函数应该在存储属性之前拆分字符串和trim元素吗
  • 如果构造函数只是存储属性,并且每次调用getter时,都应该拆分属性
  • getter是否应该检查属性,如果是字符串,则将其拆分,然后存储该值,以便将来调用getter时不必这样做

  • 在构造函数中执行此操作。那只会叫一次。如果在getter中执行此操作,则必须多次执行拆分。

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

    假设您至少要调用一次
    get
    ,则第一个选项更可取

    第二个选项的缺点是,您可能需要多次拆分,如果您经常调用
    get
    ,可能会导致性能损失

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

    如果您经常不调用
    get
    至少一次,或者如果您需要访问原始字符串,那么第三个选项可能是有意义的(至少从性能的角度来看,第一个选项仍然是一个更好的设计),但如果是这样的话,我会非常关心您的设计

  • 构造函数应该在存储属性之前拆分字符串和trim元素吗
  • 如果构造函数只是存储属性,并且每次调用getter时,都应该拆分属性
  • 如果getter检查属性,如果它是字符串,则将其拆分,然后存储该值,以便将来调用getter时不必
  • 我将逐一介绍这些问题

  • 使用这种方法,您可以在创建类时执行所有初始化。这通常是一个很好的实践,它允许您的类定义(有哪些字段)真正匹配类应该是什么
  • 使用这种方法,构造函数很简单,但现在getter变得复杂,类定义也不那么清晰。您必须在某个地方的注释中解释
    property.split(“,”[4]
    是特定的
  • 这是比需要的更复杂的逻辑。请不要这样做

  • 总之,对我来说,#1似乎是最好的解决方案。

    在Joshua Bloch的《高效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;
        }
    }
    

    还有比调用split更多时间更令人信服的原因如果是这种情况,我仍然希望在构造函数中拆分字符串,但也存储原始字符串。这是我列表中的第三项,但这似乎与所有其他答案背道而驰,因此,如果不打算使用它,就不应该构造某些东西,因此在构造函数中拆分字符串基本上与此构成相同的工作量,只是在构造函数中是一个更干净的解决方案。