我正在阅读this,并想知道是否有一个特殊原因让方法用数据填充预先存在的数组或对象,而不是返回对象或数据的实例。
在某些情况下,例如图形,它允许重新使用对象,只重写基元而不在每次调用时分配另一个对象。
我还没有考虑其他任何好处吗?
答案 0 :(得分:2)
我正在读这篇文章并想知道是否有特殊原因 用于填充预先存在的数组或对象的方法 数据,而不是返回对象或数据的实例。
这是两种替代方式 当(当然还有其他的)时,提供要作为方法的参数填充的对象具有一些优点:
1)您希望向方法提供具有客户端定义的状态的对象,而不是在调用方法中定义的泛型或原始状态。
如果不将其实例作为参数传递,则无法执行此操作。
2)你想节省内存消耗。如果您已经有一个对象将其作为参数传递,为什么要在调用的方法中创建一个新对象?
3)在方法中有多个要对象的对象,但方法只能返回一个对象。
想象一下,你想在实现中填充3个列表。
例如,您可以调用poupulateList(myList, myOtherList, myAgainOtherList);
有了这个实现:
public void populateList(List<String> list, List<String> myOtherList, List<String> myAgainOtherList){
....
}
如果不将对象作为参数传递,则必须引入包含所有这些对象的自定义类,并将其定义为方法的返回类型。
答案 1 :(得分:1)
考虑以下简单方法,它用几个数字填充整数数组:
public void fillArray(int[] array) {
array[0] = 0;
array[1] = 1;
array[2] = 2;
}
// now use it
int[] array = new array[3];
fillArray(array);
当方法fillArray()
用一些值填充数组时,它正在寻址调用者传入的实际数组。调用者保留对其数组的引用,因此不需要将引用传递回数据。请注意,我们可以将fillArray()
的签名更改为int[]
,并返回对数组的引用,但从功能上讲,它不会产生太大的影响。
返回int[]
可能有意义的是,如果我们想创建一个为数组分配空间然后返回结果的方法,例如
public int[] getArray() {
int[] array = new int[3];
array[0] = 0;
array[1] = 1;
array[2] = 2;
return array;
}
在这种情况下,调用者没有/想要接触阵列的工作,他只想要最终产品。因此,返回对数组的引用是有意义的,没有它,调用者就无法使用该方法生成的数据。
答案 2 :(得分:1)
我明白你为什么这么想。 MemoryInfo
和getMemoryInfo()
的设计允许您根据需要创建尽可能多的MemoryInfo
个对象,但如果它们都是正确的,那么它们应该都保存相同的数据,因此它会这样做真的没有意义。更清晰的设计会为您提供四个可以返回四个值的吸气剂。
我认为选择设计的一个原因是效率:它允许您在每次调用时将相同的对象传递给方法,并且它在一次调用中提供所有信息而不是四次。不过我在这里猜测。
一般来说,选择一种设计而不是另一种设计时需要考虑的事情。例如,如果一个方法是给你一些关于一个人的信息,我会发现将一个person对象传递给方法来修改是很自然的,而不是每次调用时返回一个代表同一个人的新person对象的方法。或者至少它应该每次都给你相同的对象,当你询问一个新人时,它只会给你一个新对象。