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声明不断出现此错误。我做错了什么?
答案 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);
}
}