类型集不带参数

时间:2015-06-19 06:35:31

标签: java netbeans

package set;

import java.util.*;

public class Set 
{

  public static void main(String[] args)
  {
    String [] things = {"appple", "bob", "ham", "bob", "bacon"};
    List<String> list = Arrays.asList(things);

    System.out.printf("%s ", list);
    System.out.println();

    Set<String> set = new HashSet<String>(list);
    System.out.printf("%s ", set);

  }

} 

当我尝试运行此程序时,我的set声明不断出现此错误。我做错了什么?

4 个答案:

答案 0 :(得分:3)

将您的public class Set课程重命名为不隐藏java.util.Set的名称。

您的自定义Set课程不接受任何类型参数。这就是为什么Set<String>没有通过编译的原因。

例如:

package set;

import java.util.*;

public class SetTest 
{
    public static void main(String[] args)
    {
        String [] things = {"appple", "bob", "ham", "bob", "bacon"};
        List<String> list = Arrays.asList(things);

        System.out.printf("%s ", list);
        System.out.println();

        Set<String> set = new HashSet<String>(list);
        System.out.printf("%s ", set);  
    } 
}

答案 1 :(得分:1)

您为自己的班级Set命名,将标准班级Set隐藏在包java.util中。

将您的课程重命名为Set以外的其他内容。

答案 2 :(得分:0)

您已通过命名自己的本地课程java.util.Set来隐藏Set导入(set.Set具有更高的范围可见性且不通用)。您可以重命名set.Set,或使用完全限定名称(以及菱形运算符<>)。变化

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

类似

java.util.Set<String> set = new HashSet<>(list);

答案 3 :(得分:0)

虽然命名Java API等中已经存在的类不是一个好主意。

添加此功能就足够了

java.util.Set<String> set = new HashSet<String>(list);

您仍然对现有的

进行了一些更改
package set;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

public class Set {

    public static void main(String[] args) {
        String[] things = { "appple", "bob", "ham", "bob", "bacon" };
        List<String> list = Arrays.asList(things);

        System.out.printf("%s ", list);
        System.out.println();

        java.util.Set<String> set = new HashSet<String>(list);
        System.out.printf("%s ", set);

    }
}