【问题标题】:How to create a generic <T> class so that T extends Collections<String>?如何创建一个通用的 <T> 类以便 T 扩展 Collections<String>?
【发布时间】:2017-12-20 08:12:23
【问题描述】:

我想创建一个泛型 ThreadWorker 类,它是泛型类型 &lt;T&gt; 接受扩展 Collection 类型 &lt;String&gt; 的类。

我试过了:

public class Worker <T extends Collections<String>> extends SwingWorker<VectorDetails , String>    

但我得到一个错误:

The type Collections is not generic; it cannot be parameterized with arguments <String>

当我写的时候:

public class Worker <T extends Collections> extends SwingWorker<VectorDetails , String>  

它编译得很好,但这不是我需要的,因为这个 Worker 类的实例可以用不是String 的其他类的类型来创建。 (如&lt; Integer&gt;&lt;Character&gt; 等)。

如何强制用户使用扩展/实现包含字符串的 Collection 类的类型创建我的类的实例?

【问题讨论】:

  • 你的意思是Collection(单数)?
  • Collections 是一个带有一堆静态方法的非泛型类,而Collection&lt;E&gt; 是一个泛型接口。

标签: java generics collections


【解决方案1】:

这就是你要找的吗?

class StringCollection<T extends Collection<H>, H extends String> {}

【讨论】:

  • 考虑到String 是最终的,H extends String 是不必要的。这个问题只是一个错字。
  • 是的,String 本身在这种情况下没有多大意义,但是如果您希望使用自己的类型,上面的代码应该可以正常工作:D
【解决方案2】:

错误说明代码有什么问题。 Collections 不是泛型类型。它是一个实用类,有很多静态方法来操作 Collection(s)。您应该使用Collection&lt;String&gt; 或任何类型。 Collection 是一个泛型类型(列表和集合扩展)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 2014-06-07
    • 2012-12-01
    相关资源
    最近更新 更多