Key Type
The purpose of this class is to enable capturing and passing a generic Type. In order to capture the generic type and retain it at runtime, you need to create a subclass (ideally as anonymous inline class) as follows:
KeyType<List<String>> typeRef = new KeyType<List<String>>() {};
*The resulting typeRef instance can then be used to obtain a Type instance that carries the captured parameterized type information at runtime. For more information on "super type tokens" see the link to Neal Gafter's blog post.
This is inspired by Spring project
See also
(https://github.com/spring-projects/spring-framework/blob/main/spring-core/src/main/java/org/springframework/core/ParameterizedTypeReference.java)