作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
前几天我正在编写一个程序,要求我:获取 ArrayList<String>
中特定对象的频率。 ,删除 List
未指定的所有出现的给定项目等。界面。我决定编写自己的帮助程序类,并希望使其尽可能可重用。我决定指定 List
作为集合的参数类型,因此我可以将它用于任何实现 List
的类界面。但这些类通常是使用泛型定义的,我不知道要删除的项目是什么类类型。因此,我要么必须通用地定义静态辅助方法,因为静态类不能显式包含泛型类型,要么将要删除的对象的类类型定义为 Object
。我以两种方式实现它,见下文,但我想知道使用一种方式是否比另一种方式有任何好处。
有关该主题的一些其他问题:
ListTools_V2.getFrequencyOf(ArrayList<String> items, String s)
仍然有效。 使用对象类类型实现
import java.util.List;
/** General utility class for performing frequently needed operations
on any class implementing the List interface **/
public class ListTools {
public static void removeAllOccurrences(List items, Object o) {
while(items.contains(o)) {
items.remove(o);
}
}
public static int getFrequencyOf(List items, Object o) {
int frequency = 0;
for(Object item : items) {
if(item.equals(o)) {
frequency++;
}
}
return frequency;
}
}
使用泛型实现
import java.util.List;
/** General utility class for performing frequently needed operations
on any class implementing the List interface. This implementation
uses generics to maximize reusability. **/
public class ListTools_V2 {
public static <E> void removeAllOccurrences(List<E> items, E o) {
while(items.contains(o)) {
items.remove(o);
}
}
public static <E> int getFrequencyOf(List<E> items,E o) {
int frequency = 0;
for(E item : items) {
if(item.equals(o)) {
frequency++;
}
}
return frequency;
}
}
最佳答案
这两个操作都对给定对象引用和列表内的元素之间的相等性 (.equals()
) 进行操作,并且相等性不限于相同类型的对象,因此您不应该限制 o
与列表的类型参数的类型相同。
但是,原始类型不好,因此您不应该使用原始类型List
。当不需要对类型变量进行任何约束时,您应该使用通配符对其进行参数化:
public static void removeAllOccurrences(List<?> items, Object o)
public static int getFrequencyOf(List<?> items, Object o)
关于java - 对于 Java 中的静态帮助器类,使用泛型还是对象类型更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30930168/
我刚开始使用 Dagger 2,想知道与我目前用来实现依赖注入(inject)的技术相比,它有什么优势。 目前,为了实现 DI,我创建了一个具有两种风格的项目:mock 和 prod。在这些风格中,我
我是一名优秀的程序员,十分优秀!