将Set<String>强转为LinkedHashSet传入方法是否安全?
强转Set为LinkedHashSet调用方法是否安全?
在你描述的场景下,直接强转是安全的。
因为你声明的Set<String>类型对象attributes(对应代码里的unselectedAttribute),实际运行时的实例就是LinkedHashSet<String>,强转操作只是告诉编译器“这个对象实际就是LinkedHashSet类型”,不会触发运行时的ClassCastException。
不过要注意两个风险点:
- 如果后续代码中
attributes被重新赋值为其他Set实现类(比如HashSet、TreeSet),再做这个强转就会抛出ClassCastException,这时候就不安全了。 - 如果
rerankAttributesByType方法内部没有用到LinkedHashSet特有的方法(比如removeFirst()、getLast()这类仅LinkedHashSet具备的API),更稳妥的做法是把方法参数改成Set<String>,这样既不影响功能,还能提升代码的灵活性和兼容性,不用依赖具体的实现类。
你的调用代码:
List<String> newAttributes = rerankAttributesByType((LinkedHashSet<String>) unselectedAttribute)
在当前实例为LinkedHashSet的情况下可以正常运行,但要警惕后续实例类型变更带来的隐患。
内容的提问来源于stack exchange,提问作者czheng15
相关产品推荐
相关产品推荐

