Sundarrajk's Weblog

PMD – Type Resolution Rules

Posted on: September 28, 2011

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


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


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


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


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


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


// this is bad
public class Foo {}


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.


public void methodThrowingException() throws Exception {

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: