Java Algebraic-data-types Resources