This rule raises an issue when an iteration over the items of a Collection
is performed on a super-type of the type handled by the
Collection
.
Relying on Object
or any classes between Object
and the real class handled by the Collection
is not
recommended. While it's accepted by the language, this practice reduces readability of the code and forces to down-cast the item of the
Collection
to be able to call a method on it while simply using the correct type in the iteration makes things more clear and simple.
public Collection<Person> getPersons() { ... } for (Object item : getPersons()) { // Noncompliant Person person = (Person) item; // Noncompliant; it's required to down-cast to the to correct type to use "item" person.getAdress(); }
for (Person person : getPersons()) { // Compliant person.getAddress() ; }