2009-06-23 7 views
4

Grundsätzlich möchte ich ein Verfahren zu schaffen, die eine Signatur wie folgt hat:Was ist die generische Signatur einer Methode, die eine Instanz einer bestimmten Unterklasse zurückgibt?

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

aber dies ist nicht gültig Java.
Ich möchte in der Lage sein, eine Klasse übergeben, die eine Unterklasse von ShellTab ist und eine Instanz dieser Klasse zurückgegeben.

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

funktioniert gut, aber ich möchte shellTabClass zwingen, eine Unterklasse von ShellTab zu sein.

Irgendwelche Ideen, wie man das abzieht?

Vielen Dank.

Antwort

12

Setzen Sie die Einschränkung in der ursprünglichen generischen Parameter, wie folgt aus:

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

Beachten Sie, dass Einschränkungen für die generische Typparameter der Verfahrensparameter (zum Beispiel haben kann, schlägt Tom Hawtin - tacklineshellTabClass in eine Class<? extends T> machen, obwohl ich denke, dass es in diesem Fall keinen Unterschied macht).
Sie können jedoch einen Typ, der bereits deklariert wurde, nicht einschränken.

+0

Wahrscheinlich öffentlich T getShellTab (Klasse shellTabClass). –

+0

Kauft das etwas über das, was ich gepostet habe? T könnte sowieso irgendeine Unterklasse von ShellTab sein, oder? –

+0

D'Oh! Es ist jetzt so einfach! Super, das funktioniert super danke. – Sandro

3

Wie wäre es damit?

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