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

LooseCoupling

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

Example

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 class

Example

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 {
}
Advertisements

Leave a Reply

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

WordPress.com Logo

You are commenting using your WordPress.com 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

Categories

%d bloggers like this: