我正在学习 Java,但我相信这个问题不是特定于语言的。抱歉,如果有人已经问过这个问题,我不知道如何在搜索查询中表达这个问题。
为自己实现了一些泛型方法后不久,我意识到:由于泛型允许您使用更多类型的参数,因此用户输入的某些参数可能没有您期望的功能。我想出的一个“hack”是使用接口作为上限来限制参数输入类型。对于像 compareTo() 这样的流行功能,这很好,因为接口 Comparable 已经足够流行了,但是我发现我不得不编写一个自定义接口来让我的泛型工作很尴尬。
这里有一些代码可以帮助理解我的废话。考虑以下尝试计算通用数据类型集合中唯一元素的非工作代码:
public static <T> int countUnique(Collection<T> c) {
int count = 0;
for(T t : c) {
count += (t.isUnique()) ? (1) : (0);
}
return count;
}
当编译器抱怨对象t
没有(或者更确切地说,编译器无法确定它们有)方法时,就会出现一个明显的问题isUnique()
。我的解决方案:
public interface unique {
public boolean isUnique();
}
public static <T extends unique> int countUnique(Collection<T> c) {
int count = 0;
for(T t : c) {
count += (t.isUnique()) ? (1) : (0);
}
return count;
}
问题是:我必须每次都这样做吗?是不是很笨重?有没有我应该采用的标准做法?