java集合门面

时间:2014-05-01 07:11:33

标签: java collections facade

我需要创建一个采用TreeSet或HashSet的Facade。 它的构造函数必须如下所示:

CollectionFacadeSet(java.util.Collection<java.lang.String> collection)

我导入java集合并使用以下行:

Collections <String> collection = new Collections<>();

但是,java不接受它,我收到错误:

  
      
  • 类型集合不是通用的;它不能用参数参数化       
        
    • 类型集合不是通用的;它不能使用参数&lt;&gt;
    • 进行参数化   
  •   

任何解决方案?

谢谢!

4 个答案:

答案 0 :(得分:7)

java.util.Collections(注意复数形式)是一个辅助类,有许多静态方法来操作Collectionjava.util.Collection(单数)是所有JDK内置集合(List s,Set等)的基类。

TL; DR - 您正在导入错误的课程。

P.S .: 请注意,java.util.Collectionabstract类,您无法实例化它。

答案 1 :(得分:2)

虽然您的变量可以是Collection,但它拥有引用的对象必须是具体类型;您无法实例化集合(或您尝试的集合)。

尝试这样的事情:

Collection<String> c = new ArrayList<>();

但是如果你需要一个Set,请使用一个:

Set<String> set = new HashSet<>();

答案 2 :(得分:2)

首先,您使用的java.util.Collections类不是泛型类,因此您无法将其参数化为String类型。您应该使用java.util.Collection。

其次,由于Collection是一个接口所以必须使其实现类的对象。

你可以使用 -

Collection <String> collection = new ArrayList<String>();

答案 3 :(得分:1)

我相信你遇到的问题是因为你试图实例化一个类型为&#39; Collections&#39;的变量。相反,可以将方法更改为接受使用&#39; Set&#39;接口:

public Set<String> CollectionFacadeSet(Set<String> mySet)

如果希望返回特定类型的集合(例如HashSet或TreeSet),只需相应地更改返回参数。其中,您现在可以将集合设置为您选择的集类型:

Collection<String> myCollection = CollectionFacadeSet(someSet);