Java 如何处理一种类型的输入和另一种类型的输出
我有一个非常小和简单的类,但它给了我一些问题,如何最好地处理它 它有一个构造函数和一个get方法 其目的是存储一个值数组,并在通过get方法请求时返回它们 此外,值数组可以作为逗号分隔的字符串传递给构造函数。这就是我无法决定如何处理事情的地方Java 如何处理一种类型的输入和另一种类型的输出,java,algorithm,design-patterns,Java,Algorithm,Design Patterns,我有一个非常小和简单的类,但它给了我一些问题,如何最好地处理它 它有一个构造函数和一个get方法 其目的是存储一个值数组,并在通过get方法请求时返回它们 此外,值数组可以作为逗号分隔的字符串传递给构造函数。这就是我无法决定如何处理事情的地方 构造函数应该在存储属性之前拆分字符串和trim元素吗 如果构造函数只是存储属性,并且每次调用getter时,都应该拆分属性 getter是否应该检查属性,如果是字符串,则将其拆分,然后存储该值,以便将来调用getter时不必这样做 在构造函数中执行此操作
在构造函数中执行此操作。那只会叫一次。如果在getter中执行此操作,则必须多次执行拆分。应由您决定是否需要原始字符串。如果您不这样做,那么在构造函数中完成任务是合乎逻辑的选择。假设您至少要调用一次
get
,则第一个选项更可取
第二个选项的缺点是,您可能需要多次拆分,如果您经常调用get
,可能会导致性能损失
第三个选项的缺点是,您可能需要有两个变量(一个字符串和一个数组),一次只使用其中一个,或者类型为对象
,然后是字符串或数组。这两个选项都不是特别好的设计
如果您经常不调用get
至少一次,或者如果您需要访问原始字符串,那么第三个选项可能是有意义的(至少从性能的角度来看,第一个选项仍然是一个更好的设计),但如果是这样的话,我会非常关心您的设计
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更多时间更令人信服的原因如果是这种情况,我仍然希望在构造函数中拆分字符串,但也存储原始字符串。这是我列表中的第三项,但这似乎与所有其他答案背道而驰,因此,如果不打算使用它,就不应该构造某些东西,因此在构造函数中拆分字符串基本上与此构成相同的工作量,只是在构造函数中是一个更干净的解决方案。