EFFECTIVE JAVA - UPDATED FOR JAVA 9 by JOSHUA BLOCH , 2018