https://medium.com/@jayram_manale/unlocking-the-power-of-immutable-classes-in-java-write-robust-and-thread-safe-code-95552b103ad2