Why is this an issue?
Unnecessary casting expressions make the code harder to read and understand.
Noncompliant code example
public void example() {
for (Foo obj : (List<Foo>) getFoos()) { // Noncompliant; cast unnecessary because List<Foo> is what's returned
//...
}
}
public List<Foo> getFoos() {
return this.foos;
}
Compliant solution
public void example() {
for (Foo obj : getFoos()) {
//...
}
}
public List<Foo> getFoos() {
return this.foos;
}
Exceptions
Casting may be required to distinguish the method to call in the case of overloading:
class A {}
class B extends A{}
class C {
void fun(A a){}
void fun(B b){}
void foo() {
B b = new B();
fun(b);
fun((A) b); //call the first method so cast is not redundant.
}
}