Skip to content

References

David Bürgin edited this page Nov 16, 2015 · 14 revisions

References

Checker Framework. The Checker Framework Manual, links to which I sprinkled throughout the text, is an excellent resource worth scrolling through.

null. Tony Hoare, the inventor of the null reference famously called his invention his ‘billion-dollar mistake’. Assorted remarks about the dangers of null are pervasive in the printed Java literature. Some useful online resources include the Guava wiki page ‘Using and avoiding null’, and the topical questions and answers on the Programmers Stack Exchange, ‘Are null references really a bad thing?’ and ‘If null is bad, why do modern languages implement it?’. Discussions of the Optional class tend to remark on null and the problems associated with it: I’ve found the articles by Edwin Dalorzo, ‘Java 8 Optional Objects’, and Benjamin Winterberg, ‘Avoiding Null Checks in Java 8’, useful. Java platform developer Stuart Marks talks about Optional at JavaOne 2015.

Other Tools. The Checker Framework has not yet arrived in the mainstream Java community. In any case, other competing or complementary static analysis tools are also worth investigating. Some well-known names with various scope are SonarQube, FindBugs, PMD, Error Prone. IDEs like Eclipse and IntelliJ IDEA have gained excellent nullness inference capabilities over the years, and these are proudly being advertised, too (Eclipse, IntelliJ IDEA). The Checker Framework plugin for Eclipse has worked well for me and can be used without even touching a Maven POM.

Research. The Checker Framework comes out of academia, and there are lots of interesting papers about nullness analyses in Java out there. The ‘Publications’ section in the Checker Framework manual has papers about the Checker Framework itself, and Patrice Chalin and Perry James’s ‘Non-Null References by Default in Java: Alleviating the Nullity Annotation Burden’ may be a good starting point for some empirical findings about the nullability of references in Java.

Clone this wiki locally