【问题标题】:What is the generic signature of a method that returns an instance of a given subclass?返回给定子类实例的方法的通用签名是什么?
【发布时间】:2009-06-23 14:38:55
【问题描述】:

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

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

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

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

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

关于如何实现这一点的任何想法?

谢谢。

【问题讨论】:

    标签: java generics


    【解决方案1】:

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

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

    请注意,您可以对方法参数的泛型类型参数进行限制(例如,Tom Hawtin - tackline 建议将 shellTabClass 设置为 Class&lt;? extends T&gt;,尽管我认为在这种情况下不会有什么不同) .
    但是你不能约束已经声明的类型。

    【讨论】:

    • 可能是公共的 T getShellTab(Class extends T> shellTabClass).
    • 这是否比我发布的内容更有价值? T 可以是 ShellTab 的任何子类,对吧?
    • 哦!现在就这么简单!太棒了,效果很好,谢谢。
    【解决方案2】:

    这个怎么样?

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

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      相关资源
      最近更新 更多