https://medium.com/@travelswithkrishna/advanced-java-features-day-29-exploring-javas-powerful-capabilities-2dc1774ea460