如何在 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;
}
假设我最初声明并定义了一组整数,如下所示:
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;
}