我对Java和一般编程都很陌生。我现时面对的问题如下:
我有一个由5个对象组成的数组。这5个对象中有2个具有特定的属性,我希望将这2个对象作为方法的参数发送。在解析具有该属性的项的数组后,是否有可能将这些项作为参数放到函数中,而不将它们复制到辅助变量中?
发布于 2014-10-26 21:41:57
如果您不知道有多少对象将满足您的条件,您将不知道有多少对象需要传递到一个新函数中。因此,我建议您的函数(如果还没有)接受ArrayList。
您可以做的是循环遍历数组以查找符合条件的项,然后将它们添加到ArrayList中。完成后,可以将该数组列表传递给您的函数。下面是一个代码片段,它假设数组是字符串变量:
ArrayList<String> tmpList = new ArrayList<String>();
for(int i = 0; i < myArray.Length; i++){
if(myArray[i].contains("Something."){ // Use whatever criteria you need here.
tmpList.Add(myArray[i]);
}
}
myFunction(tmpList);我认为这是最好的办法。ArrayLists是无界的,因此您可以向其添加未知数量的项。
例如,您在问题中说,您有一个由5个项组成的数组,其中两个项可能需要传递到函数中。如果总是这样,您可以定义一个长度为2的数组来存储这些项,或者可以将您的函数设计为有2个输入。
但是,当您需要传递3项时会发生什么呢?您的函数可能不会被设计为接受3项。或者,您已经将数组定义为长度2,所以不能给它第三项。如果您使用ArrayList,您将有这种灵活性向前迈进。
发布于 2014-10-26 21:33:38
如果我理解你的问题,那你就不能这么做,但你不应该这么做。
“复制”它们到其他变量是正确的事情,但你的术语是错误的。您可以创建两个变量references,该变量指向具有所需属性的这两个特定对象,然后将这些引用传递给方法。这不会复制对象的任何内容,它只是创建一个指向同一个实例的命名reference。
或者,您可以考虑将整个数组传递到方法中,并让该方法确定它将从数组中使用哪些对象,但这是一个设计决策,如果要这样做,应该有一个坚实的基础。
发布于 2014-10-26 21:40:59
我想数组的大小和要拾取的对象的数量在编译时是未知的,否则您就可以声明一个带有2个参数的函数,并像往常一样调用它。
因此,答案是“否”,您必须使用另一个数组,或者更简单地使用一个java列表:
List<MyObj> pickedOnes = new ArrayList<MyObj>(yourArray.length); //create an array-backed list
for (MyObj obj: yourArray) {
if (isToPick(obj)) {//checking your condition on whether to pick up the object
pickedOnes.add(obj);
}
}
yourFunction(pickedOnes); //call it with List<MyObj>请注意,Java实际上并不复制MyObj对象,它只复制对它的引用,这非常快速,而且成本可以忽略不计。
https://stackoverflow.com/questions/26578190
复制相似问题