我正在进行以下操作。
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]]
不应该在第一种情况下给出类强制转换异常吗?
谢谢,
山塔努
答案 0 :(得分:2)
泛型是java语言的编译时功能所以在你运行时的代码中你正在做的是将它转换为ArrayList
所以最终它是ArrayList
所以没有执行。
此外,您的代码不会对返回的'ArrayList'执行任何操作,只会打印调用toString()
方法的代码,因此您的代码目前无法拥有ClassCastExpection
答案 1 :(得分:0)
您为ob1
和ob2
提供的类型参数在运行时不存在。 println
方法不会带有实际类型,因为它只是调用Object#toString
方法。除非您尝试将存储在数组列表中的对象直接用作不正确的类型,否则不会得到ClassCastException
。
例如,如果您执行以下操作,则会出现异常。
String s = ob.iterator.next();