Unnecessary casting expressions make the code harder to read and understand.
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; }
public void example() { for (Foo obj : getFoos()) { //... } } public List<Foo> getFoos() { return this.foos; }
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. } }