我需要创建一个采用TreeSet或HashSet的Facade。 它的构造函数必须如下所示:
CollectionFacadeSet(java.util.Collection<java.lang.String> collection)
我导入java集合并使用以下行:
Collections <String> collection = new Collections<>();
但是,java不接受它,我收到错误:
- 类型集合不是通用的;它不能用参数参数化
- 类型集合不是通用的;它不能使用参数&lt;&gt;
进行参数化
任何解决方案?
谢谢!
答案 0 :(得分:7)
java.util.Collections
(注意复数形式)是一个辅助类,有许多静态方法来操作Collection
。
java.util.Collection
(单数)是所有JDK内置集合(List
s,Set
等)的基类。
TL; DR - 您正在导入错误的课程。
P.S .:
请注意,java.util.Collection
是abstract
类,您无法实例化它。
答案 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);