java - 为什么我不能将 String 数组与采用 Iterable 作为参数的方法一起使用?

标签 java generics interface functional-programming

我正在尝试用 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;
}

为什么我不能将它与此代码片段一起使用:

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 作为第一个参数,我认为我涵盖了所有情况。

最佳答案

不幸的是,数组没有实现 Java 中的任何接口(interface)。 enhanced for loop分别处理数组可迭代对象。

但是,您可以使用 Arrays.asList(T...) 将数组包装在 List<T> 中这是可迭代的。

就“功能库”方面而言,您可能应该看看 Google Collections其中有很多类似的东西。

关于java - 为什么我不能将 String 数组与采用 Iterable 作为参数的方法一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2044820/

相关文章:

java - Hibernate - ManyToOne 和继承/JOINED/mappedBy

java - 通用数据类型参数

java - 使用 2 个泛型参数简化 Java 类

java - 即使没有指定接口(interface),也可以针对接口(interface)编译 Java 类

generics - F#:尝试通过界面复制和更新记录时出错

c# - 具有 "has property X"约束的通用函数?

java - 为什么序列化代理模式与对象图包含循环的类不兼容

java - 获取Java webapp中的所有用户和角色

java - 如何在java中执行两次cordova回调(成功或错误)

swift - 如何根据通用类型在 Swift 中拥有默认和专用功能?