'instanceof'不一致

2 java javafx

嘿编程学生在这里.

我有一个JavaFX应用程序.我有一个窗格,我想从中删除所有矩形.这是代码:

public Pane yard = new Pane();
...
for(int i = 0; i < yard.getChildren().size(); i++)
{
    if(yard.getChildren().get(i) instanceof Rectangle)
    {
        yard.getChildren().remove(i);
    }
 }
Run Code Online (Sandbox Code Playgroud)

这有时很好.其他时候它根本无法删除任何东西.谢谢您的帮助.

Ran*_*niz 8

您在向前推进索引时删除项目,导致您不考虑删除某些项目.

你应该用一个Iterator代替来解决这个问题:

Iterator<?> it = yard.getChildren().iterator();
while(it.hasNext()) {
    if(it.next() instanceof Rectangle) {
        it.remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你使用的是Java 8,那么你可以这样做,而且更具可读性:

yard.getChildren().removeIf(Rectangle.class::isInstance);
Run Code Online (Sandbox Code Playgroud)

  • 还有`yard.getChildren().removeIf(Rectangle.class :: isInstance);`. (4认同)