https://qubqub.github.io/effective-java-3e/chapter-09/item72/