在我的一个方法中,我需要将对象作为可变长度参数传递。 但是,首先我需要处理最后一个对象,然后基于许多其他处理将完成。我无法弄清楚如何使用传统的for循环然后索引来为变量参数列表中的每个项使用索引。所以我使用下面的代码。这是将对象引用复制到另一个Array或ArrayList的正确方法吗?否则,首先访问特定对象然后遍历所有其他对象的最佳方法是什么。
public static int generateConnectedPatterns(String endStr,Moorchana.MoorchanInnerClass...totalPatterns) {
// First copy all the objects to new ArrayList or Array of objects
ArrayList <Moorchana.MoorchanInnerClass> objectList = new ArrayList<>();
objectList.addAll(Arrays.asList(totalPatterns));
//Temporarily use lastObject variable for convenience.
Moorchana.MoorchanInnerClass lastObject = objectList.get(objectList.size()-1);
// Split the last input string into swaras
ArrayList<Integer> indices = new ArrayList<>();
ArrayList<String> tempPatternList = new ArrayList<>();
splitInputPatternIntoArrayList(tempPatternList , indices, lastObject.rawInputString);
if (Moorchana.validatePresenceInSwaraPool(endStr, lastObject.returnOuterObjectRef().swaraPool) == -1) {
return (-1);
}
// Get the index of the ending String
int indexofEndStr = lastObject.returnOuterObjectRef().getSwaraIndex(endStr);
// Now get the number of patterns to be generated.
int count = lastObject.returnOuterObjectRef().getPatternCount(indices, indexofEndStr);
// Now Do remaining programming here based on the count.
return(Constants.SUCCESS);
}
答案 0 :(得分:2)
将totalPatterns
视为数组。
识别最后一个元素:totalPatterns[totalPatterns.length-1]
对于迭代,您可以使用增强的for循环。
for ( Moorchana.MoorchanInnerClass d : totalPatterns){...}
注意:如果您不确定要传递的输入,请在处理数组之前执行空检查。
答案 1 :(得分:2)
varargs基本上是array
。
检查null
和length
后,您可以像使用array
一样访问最后一个元素。
另一方面,Arrays.asList
会返回固定大小列表,这意味着您将无法在以后操作其大小,因此请注意UnsupportedOperationException
s 。
简而言之,您可以将varargs用作array
,并在执行必要的检查后引用最后一个元素。