有人可以解释一下为什么这段代码编译和运行良好,尽管SortedSet是一个接口而不是一个具体的类:
public static void main(String[] args) {
Integer[] nums = {4, 7, 8, 14, 45, 33};
List<Integer> numList = Arrays.asList(nums);
TreeSet<Integer> numSet = new TreeSet<Integer>();
numSet.addAll(numList);
SortedSet<Integer> sSet = numSet.subSet(5, 20);
sSet.add(17);
System.out.println(sSet);
}
它正常打印结果:[7, 8, 14, 17]
此外,SortedSet 无法实例化(预期)这一事实加剧了我的疑惑。此行不编译:
SortedSet<Integer> sSet = new SortedSet<Integer>();
但是,如果我尝试代码:
public static void main(String[] args) {
Integer[] nums = {4, 7, 8, 14, 45, 33};
List<Integer> numList = Arrays.asList(nums);
numList.add(56);
System.out.println(numList);
}
它抛出一个UnsupportedOperationException
. 我认为,这是因为 List 是一个接口,不能作为一个具体的类来处理。什么是真实的SortedSet
?