Error: can only iterate over an array or an instance of java.lang.Iterable

Error: can only iterate over an array or an instance of java.lang.Iterable

Error: can only iterate over an array or an instance of java.lang.Iterable

I assume Nodecollection is a com.aspose.words.NodeCollection.

If you want to use the foreach syntax you better do:

Node[] shapesArray = shapes.toArray();
for (Node node : shapesArray ){ ...

Error: can only iterate over an array or an instance of java.lang.Iterable

It clearly says that you should iterate only on objects which are iterable.

In your code you are using

NodeCollection<Shape> shapes = doc.getChildNodes(NodeType.SHAPE, true, false);
...    
for(Shape shape: shapes)

The for loop fails unless the shapes base class is an instance of a java.util.Collection or java.lang.Iterable.

Check if NodeCollection is a collection type class that implemented java.lang.Iterable.


Edit:

the nodeCollection is from the com.aspose.words.

NodeCollection implements generic Iterable directly, without specifying the type of objects it would be handling. Hence you should explicitly generate the Iterator from the NodeCollection instance and on that you can iterate.

NodeCollection<Shape> shapes = doc.getChildNodes(NodeType.SHAPE, true, false);
Iterator<Shape> shapesIterator = shapes.iterator();
...    
// now use the above iterator in for loop, as below
for( Shape shape: shapesIterator )

Refer to a similar answer on so

Error: can only iterate over an array or an instance of java.lang.Iterable

Related posts on java lang Iterable :

Leave a Reply

Your email address will not be published.