public static boolean isComponentBefore(GuiInterface component) {
int index = 0;
for (int i = 0; i < components.size(); i++) {
if (components.get(i).getName() == component.getName()) {
if(components.get(i- 1) == null){
return false;
}
}
}
return true;
}
我目前使用此功能,但这可能导致ConcurrentModificationExceptions&amp;它不起作用,因为每当我试图查看传入的元素之前的元素是否为null时,它一直在抛出ConcurrentModificationExceptions。
我想知道是否有其他方法可以做到这一点。
答案 0 :(得分:1)
这一行
if (components.get(i).getName() == component.getName()) {
应该是
if (components.get(i).getName().equals(component.getName())) {
然而,你的病情永远不会发生。如果component.get(i-1)
为null,则在前一循环迭代中
components.get(i).getName() // <-- null pointer exception, so
component.get(i-1)
不能为空,您需要希望i
不是0
,否则您将获得超出范围的索引异常。
答案 1 :(得分:1)
根据您的逻辑,在给定的组件NullPointerException
之前,ArrayList
会null
组成一个组件,因为components.get(i)
将是null
而components.get(i).getName()
将抛出NPE。
您可以尝试稍微更改逻辑。对于列表中的每个null元素,检查下一个组件是否是您要搜索的组件并相应返回。
for (int i = 0; i < components.size(); i++) {
if (components.get(i) == null) { // If a particular element is null, check if the next element is what you want
if(components.get(i+1).getName().equals(component.getName())) { // you need to handle the edge case for i+1 as well for the last iteration
return false;
}
}
}
请注意,您需要使用equals()
方法而不是==
运算符来比较字符串。您还需要处理最后一次迭代的i+1
的角落情况。
答案 2 :(得分:0)
使用迭代器
e.g
int i = 0;
Iterator<GuiInterface > it = components.iterator();
while (it.hasNext()) {
i++;
GuiInterface thisComp = it.next ();
if (thisComp.getName().equals(component.getName())) {
if(i > 0 && components.get(i- 1) == null){ // this code does not make sense
return false;
}
}
}
答案 3 :(得分:0)
假设传递的组件不在您的列表中:
public static boolean isComponentBefore(GUIComponent component) {
// Start at 1 to avoid IndexOutOfBounds
for(int i = 1; i < components.size(); i++) {
if (components.get(i).getName().equals(component.getName())) {
return components.get(i - 1) != null;
}
}
// Given component is not in the list, or the list only has one element
return false;
}
假设列表中传递的组件是:
public static boolean isComponentBefore(GUIComponent component) {
int index = components.indexOf(component);
return index > 0 && components.get(index - 1) != null;
}