This is the nineteenth installment of explanation of PMD rules covering Type Resolution Rules.
Type Resolution Rules
These are rules which resolve java Class files for comparisson, as opposed to a String
LooseCoupling
Avoid using implementation types (i.e., HashSet); use the interface (i.e, Set) instead
Example
CloneMethodMustImplementCloneable
The method clone() should only be implemented if the class implements the Cloneable interface with the exception of a final method that only throws CloneNotSupportedException. This version uses PMD's type resolution facilities, and can detect if the class implements or extends a Cloneable class
Example
UnusedImports
Avoid unused import statements. This rule will find unused on demand imports, i.e. import com.foo.*.
Example
SignatureDeclareThrowsException
It is unclear which exceptions that can be thrown from the methods. It might be difficult to document and understand the vague interfaces. Use either a class derived from RuntimeException or a checked exception. Junit classes are excluded.
Example
Type Resolution Rules
These are rules which resolve java Class files for comparisson, as opposed to a StringLooseCoupling
Avoid using implementation types (i.e., HashSet); use the interface (i.e, Set) insteadExample
import java.util.ArrayList;
import java.util.HashSet;
public class Bar {
// Use List instead
private ArrayList list = new ArrayList();
// Use Set instead
public HashSet getFoo() {
return new HashSet();
}
}
CloneMethodMustImplementCloneable
The method clone() should only be implemented if the class implements the Cloneable interface with the exception of a final method that only throws CloneNotSupportedException. This version uses PMD's type resolution facilities, and can detect if the class implements or extends a Cloneable classExample
public class MyClass {
public Object clone() throws CloneNotSupportedException {
return foo;
}
}
UnusedImports
Avoid unused import statements. This rule will find unused on demand imports, i.e. import com.foo.*.Example
// this is bad
import java.io.*;
public class Foo {}
SignatureDeclareThrowsException
It is unclear which exceptions that can be thrown from the methods. It might be difficult to document and understand the vague interfaces. Use either a class derived from RuntimeException or a checked exception. Junit classes are excluded.Example
public void methodThrowingException() throws Exception {
}
No comments:
Post a Comment