Type Resolution Rules

These are rules which resolve java Class files for comparisson, as opposed to a String


Since: PMD 3.9

Avoid using implementation types (i.e., HashSet); use the interface (i.e, Set) instead

This rule is defined by the following Java class: net.sourceforge.pmd.typeresolution.rules.LooseCoupling



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


Since: PMD 3.9

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

This rule is defined by the following Java class: net.sourceforge.pmd.typeresolution.rules.CloneMethodMustImplementCloneable


public class MyClass {
 public Object clone() throws CloneNotSupportedException {
  return foo;


Since: PMD 4.0

Avoid unused import statements. This rule will find unused on demand imports, i.e. import com.foo.*.

This rule is defined by the following Java class: net.sourceforge.pmd.typeresolution.rules.imports.UnusedImports



// this is bad
import java.io.*;
public class Foo {}



Since: PMD 4.0

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.

This rule is defined by the following Java class: net.sourceforge.pmd.typeresolution.rules.SignatureDeclareThrowsException


public void methodThrowingException() throws Exception {

This rule has the following properties:

NameDefault valueDescription
IgnoreJUnitCompletely false If true, all methods in a JUnit testcase may throw Exception