I am developing a framework for building generified menus for a Selenium testing framework, and I\'ve been using Guava TypeToken to resolve the types of generic parameters, but
That's how the TypeToken "hack" works. It uses Class#getGenericSuperclass() (or getGenericSuperInterface). Its javadoc states
If the superclass is a parameterized type, the
Typeobject returned must accurately reflect the actual type parameters used in the source code.
In this case, that is O, here
public abstract class AbstractMenuOptionBuilder<O extends IClickable>
You get what is hard coded in the source code. If you hard code Link as the type argument, as you do here
MenuOptionBuilder<Link> builder =
new MenuOptionBuilder<Link>(new MenuOptionBean()) {};
then you will get Link.
In this case
MenuOptionBuilder<O> builder =
new MenuOptionBuilder<O>(new MenuOptionBean()){};
you've hard coded O, so that's what you will get.
Here are some more things I've written on the subject of type tokens: