如何在 Java 中正确转换泛型集合?

How to properly cast generic collections in Java?

假设我最初声明并定义了一组整数,如下所示:

Set<Integer> s = new TreeSet<>();

现在,稍后我想使用特定于 TreeSet 的方法。想象一下我在我的项目中需要很多次。以下哪种方式被认为是更值得坚持的做法?

1- 在开始使用 s 之前写这个,在我的方法的开头

s = (TreeSet) s;

2- 使用包含的类型写入(再次在我的方法开头)

s = (TreeSet<Integer>) s;

3- 仅在我需要访问 TreeSet 特定方法时才从 Set 转换为 TreeSet

Integer x = ((TreeSet)s).first();

正如其他人所说,如果重要的话,您不需要在声明后失去 Set 作为 TreeSet 的上下文。

A TreeSet is-a Set,因此您应该能够将其作为 Set.

传递

例如:

Set<Integer> getSetButDoSomethingSpecial() {
  TreeSet<Integer> treeSet = new TreeSet<>();
  //Do something specific to treeSet
  return treeSet;
}