What is the generic signature of a method that returns an instance of a given subclass?

generics, java

Solution

Put the constraint in the initial generic parameter, like this:

public <T extends ShellTab> T getShellTab(Class<T> shellTabClass)

Note that you can have constraints on the generic type parameters of the method parameters (for instance, Tom Hawtin - tackline suggests making `shellTabClass` into a `Class<? extends T>`, although I don't think it makes a difference in this case). But you can't constrain a type that has already been declared.

Problem

Basically I want to create a method that has a signature like the following: ``` public <T> T getShellTab(Class<T extends ShellTab> shellTabClass) ``` but this isn't valid Java. I want to be able to pass a class that is a subclass of `ShellTab` and have an instance of that class returned. ``` public <T> T getShellTab(Class<T> shellTabClass) ``` works fine, but I would like to force `shellTabClass` to be a subclass of `ShellTab`. Any ideas on how to pull this off? Thank you.

Original source