基本上我想创建一个具有如下签名的方法:
public <T> T getShellTab(Class<T extends ShellTab> shellTabClass)
但这不是有效的Java
我希望能够传递一个作为ShellTab
的子类的类,并返回该类的实例。
public <T> T getShellTab(Class<T> shellTabClass)
工作正常,但我想强制shellTabClass
成为ShellTab
的子类。
关于如何解决此问题的任何想法?
谢谢。
答案 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)