IterablePathParameter
Path implements Iterable; prefer Collection for clarity

Category
JDK
Severity
ERROR
Maturity

The problem

java.file.nio.Path implements Iterable<Path>, and provides an iterator over the name elements of the path. Declaring a parameter of type Iterable<Path> is not recommended, since it allows clients to pass either an Iterable of Paths, or a single Path. Using Collection<Path> prevents clients from accidentally passing a single Path.

Example:

void printPaths(Iterable<Path> paths) {
  for (Path path : paths) System.err.println(path);
}
printPaths(Paths.get("/tmp/hello"));
tmp
hello
printPaths(ImmutableList.of(Paths.get("/tmp/hello")));
/tmp/hello

Suppression

Suppress false positives by adding an @SuppressWarnings("IterablePathParameter") annotation to the enclosing element.