Summary
In this chapter, you learned to maximize code reuse by writing code capable of working with two type parameters. We worked with more complex scenarios that involve interfaces, generics, and multiple type parameters that have constraints, also known as bounded type parameters.
We created a new interface and then we declared two classes that implemented this new interface. Then, we declared a class that worked with two constrained generic type parameters. We combined class inheritance and interfaces to maximize the reusability of code. We could make classes work with many different types and we were able to code the behavior of a party with different music generators that could then be reused to create parties of lions with a smartphone and parties of parrots with bands of animals.
Java 9 allows us to work with more complex scenarios in which we can specify more restrictions or bounds to the generic type parameters. However, most of the time, we will work with the cases covered by the...