Type-checking helps to detect and prevent errors. However, Java's built-in types are incapable of expressing important information, such as whether a variable may be null, whether a value is intended to be side-effected, or whether a String is interned. As a result, a type-correct program can suffer from null pointer exceptions, undesired mutations, improper equality testing, and many other types of problems.
Pluggable types (User-defined extensions to the type system) can detect such errors, prevent them, or verify their absence. This talk presents the Checker Framework, a practical pluggable type system for Java. The framework is compatible with all versions of Java; furthermore, Java 7 will contain syntactic support for it, in the form of type annotations.
The Checker Framework benefits programmers by improving documentation and eliminating bugs. It is intuitive to use and requires few annotations, so the burden on programmers is small. The Checker Framework also makes it easy to create new, custom checkers that verify important properties specific to your own code.
The Checker Framework is publicly available at: