类型扩展Iterable的通用方法不起作用

时间:2019-11-29 07:34:14

标签: java generics

赋值:编写一个通用静态方法print(),该方法将打印实现Iterable<E>接口的任何对象的元素。

public class ThisUtil
{
    public static <T extends Iterable<T>> void print(T[] anArray) {


        ArrayList<String> stringList = new ArrayList<>();
        for(T element: anArray)
        {
            stringList.add(element.toString());
        }
        String result = String.join(",", stringList);
        System.out.println(result);
    }

    public static void main(String[] args) {
        Integer[] list = {1, 2, 5, 9, 3, 7};
        ThisUtil.print(list);
    }
}

我遇到错误:

  

不存在类型变量T的实例,因此Integer符合   可迭代的。

我们非常感谢您的帮助。谢谢你提前。

1 个答案:

答案 0 :(得分:3)

这里:

public static <T extends Iterable<T>> void print(T[] anArray)

您说您将传递类型扩展为Iterable的元素数组,但您只想遍历此数组。您可以将方法签名更改为:

public static <T> void print(T[] anArray)

因为可以直接在for-each中使用数组。

编辑:

您可能正在寻找这样的东西:

public static <E, I extends Iterable<E>> void print(I iterable) {

    ArrayList<String> stringList = new ArrayList<>();
    for(E element: iterable) {
        stringList.add(element.toString());
    }
    String result = String.join(",", stringList);
    System.out.println(result);
}

,但是自arrays are not Iterable起您就不能将其与数组一起使用,但是可以在for-each中使用。