This method helps reconstructing the resulting ParameterizedType for a specific generic type across its hierarchy.
Example: Let's create some interface Converter[X, Y] and try to determine the actual type arguments for that
interface from classes/interfaces which inherit from it (directly or indirectly).
- Converter[X, Y] will yield Converter[X, Y]
- StringConverter[Z] extends Converter[Z, String] will yield Converter[Z, String]
- AbstractStringConverter[A] implements StringConverter[A] will yield Converter[A, String]
- UUIDStringConverter extends AbstractStringConverter[UUID] will yield Converter[UUID, String]
For the last example (UUIDStringConverter), nowhere in its hierarchy is a type directly implementing
Converter[UUID, String] but this method is capable of reconstructing that information.