0

我正在做以下操作。

    Set<Set<String>> set1 = new HashSet<Set<String>>();
    Set<Set<String>> set2 = new HashSet<Set<String>>();

    set1.add(new HashSet<String>(Arrays.asList("s1","s2")));
    set1.add(new HashSet<String>(Arrays.asList("s4","s5")));

    set2.add(new HashSet<String>(Arrays.asList("s5","s4")));


    ArrayList<String> ob = (ArrayList<String>)CollectionUtils.subtract(set1, set2);
    ArrayList<Set<String>> ob1 = (ArrayList<Set<String>>)CollectionUtils.subtract(set1, set2);
    System.out.println(ob);
    System.out.println(ob1);

它给出以下输出。
[[s2, s1]]
[[s2, s1]]

它不应该在第一种情况下给类转换异常吗?

谢谢,
山塔努

4

2 回答 2

2

泛型是 Java 语言的编译时特性,因此在运行时的代码中,您正在做的是将其强制转换为,ArrayList因此最终它ArrayList不会被执行。

此外,您的代码不会对返回的“ArrayList”做任何事情,它只是打印它调用toString()方法,因此您的代码目前没有可能拥有ClassCastExpection

于 2013-03-12T06:34:14.327 回答
0

您提供的类型参数ob1并且ob2在运行时不存在。该println方法不携带实际类型,因为它只是调用该Object#toString方法。ClassCastException除非您尝试将存储在数组列表中的对象直接用作不正确的类型,否则您不会得到 a 。

例如,如果您执行以下操作,您将收到异常。

String s = ob.iterator.next();
于 2013-03-12T06:39:19.017 回答