https://qubqub.github.io/effective-java-3e/chapter-07/item51/