【发布时间】:2011-01-03 22:16:30
【问题描述】:
我正在尝试用 Java 编写我自己的“功能性”小库。如果我有这个功能:
public static <T> List<T> filter(Iterable<T> source,BooleanTest predicate)
{
List<T> results = new ArrayList<T>();
for(T t : source)
{
if(predicate.ok(t))
results.add(t);
}
return results;
}
为什么我不能在这个 sn-p 上使用它:
String strings[] = {"one","two","three"};
List<String> containingO = IterableFuncs.filter(strings,new BooleanTest() {
public boolean ok(String obj) {
return obj.indexOf("o") != -1;
}
});
据我所知,Java 数组实现了 Iterable,对吧?需要进行哪些更改才能使该函数与数组以及集合一起使用?通过选择 Iterable 作为第一个参数,我认为我涵盖了所有情况。
【问题讨论】:
-
(
Iterable<? extends T> source会更笼统一些。) -
不要直接支持数组/可变参数;用户始终可以“导入静态 java.util.Arrays.asList”以获得将可变参数转换为集合的非常简单的方法。
标签: java generics interface functional-programming