java - 具有扩展 Iterable 类型的通用方法不起作用

标签 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);
    }
}

我收到错误:

no instance(s) of type variable(s) T exist so that Integer conforms to Iterable.

非常感谢任何帮助。谢谢您提前。

最佳答案

这里:

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中使用。

关于java - 具有扩展 Iterable 类型的通用方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59100533/

相关文章:

Java 泛型扩展循环

java - 创建java通用数据结构

java - 如何在 Java 中通过正则表达式删除 &lt;script&gt;..&lt;/script&gt;?

java - 字符串的简单日期格式

java - 带参数的 Google App Engine ApiMethod 不起作用

java - 为什么 Java 编译器知道你想对数组做什么,但不知道你想对泛型做什么?

java - 使用通配符转换常量泛型

java - 在 Java 中为具有类型参数的类编写平等契约

java - 使用 S3 存储桶名称查找 AWS 账户 ID

java - 如何膨胀 git 树对象?