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() ;
}