将数组作为参数传递时泛型方法的问题

时间:2018-04-12 14:06:18

标签: java

我有以下方法要传递不同类型的数组:

    private < E > void print(E[] arr) {
        for(E s: arr) {
            System.out.println(s + "   ");
        }
    }

当我将List<Double>数组传递给print方法时,出现以下错误:

The method print(E[]) in the type IAnalysisMocker is not applicable for the arguments (List<Double>)

有什么建议可以解决吗?

3 个答案:

答案 0 :(得分:5)

如果要传递列表(或任何可迭代的),请将方法签名更改为:

private <E> void print(Iterable<E> iterable) {
    for(E s: iterable) {
        System.out.println(s + "   ");
    }
}

由于错误显示为The method print(E[]) .. is not applicable for the arguments (List<Double>),因此在预期数组(List<E>)时,您无法传递E[]

答案 1 :(得分:2)

双打列表与双打数组不同。将参数更改为List<E> arr或实际将其传递给数组。

private <E> void print(List<E> list) {

如果你想让它成为最通用的&#34;那么Iterable<E>应该是参数的类型,因为Java for-each循环适用于该接口的任何实现者:

private <E> void print(Iterable<E> list) {

答案 2 :(得分:0)

最灵活的解决方案可能是使用Iterable<E>Arrays.asList

private <E> void print(Iterable<E> list) {
    for(E s: list) {
        System.out.println(s + "   ");
    }
}

private <E> void print(E[] list) {
    print(Arrays.asList(list));
}

然后你可以print几乎任何东西,并且将调用一个或另一个方法。