返回给定子类的实例的方法的通用签名是什么?

时间:2009-06-23 14:38:56

标签: java generics

基本上我想创建一个具有如下签名的方法:

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

但这不是有效的Java 我希望能够传递一个作为ShellTab的子类的类,并返回该类的实例。

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

工作正常,但我想强制shellTabClass成为ShellTab的子类。

关于如何解决此问题的任何想法?

谢谢。

2 个答案:

答案 0 :(得分:12)

将约束放在初始通用参数中,如下所示:

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

请注意,您可以对方法参数的泛型类型参数设置约束(例如,Tom Hawtin - tackline建议将shellTabClass变为Class<? extends T>,尽管我认为它不会在这种情况下的差异) 但是你不能约束已经声明的类型。

答案 1 :(得分:3)

这个怎么样?

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