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
ですか?