我是Java和编程的新手。我目前面临以下问题:
我有一个包含5个对象的数组。这5个对象中的2个具有某个属性,我想将这2个对象作为方法的参数发送。在解析具有该属性的项目的数组之后,是否有可能将这些项目作为参数放入函数而不将它们复制到辅助变量?
答案 0 :(得分:0)
如果我理解你的问题,那么你不能这样做,但你不应该。
将它们“复制”到其他变量是正确的做法,但你的术语是错误的。您可以创建两个变量references
,指向具有所需属性的这两个特定对象,然后将这些引用传递给方法。这不会复制对象的任何内容,只会创建一个指向同一实例的命名reference
。
或者,您可以考虑将整个数组传递给方法,并让方法确定它将从数组中使用哪些对象,但这是一个设计决策,如果你要做的话应该有一个坚实的基础。
答案 1 :(得分:0)
我猜数组的大小和要拾取的对象数量在编译时是未知的,否则您只能声明一个带有2个参数的函数并像往常一样调用它。
所以答案是“不”,你将不得不使用另一个数组,或者更容易使用java List:
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对象,它只复制对它的引用,这非常快,成本可以忽略不计。
答案 2 :(得分:0)
如果您不知道有多少对象符合您的条件,您就不知道需要将多少对象传递给新函数。所以,我建议你的函数(如果它还没有)接受一个ArrayList。
您可以做的是遍历数组以查找符合条件的项目,然后将它们添加到ArrayList。完成后,您可以将该数组列表传递给您的函数。这是一个代码片段,假设您的数组是String变量:
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的数组,或者你可以设计你的函数有2个输入。
但是当你需要传递3件物品时会发生什么?您的功能可能无法接受3项。或者,您已经将数组定义为长度为2,因此您无法将其作为第三项。如果使用ArrayList,您将具有前进的灵活性。