首页 > 解决方案 > 为泛型类型扩展 Object[]

问题描述

我正在尝试定义一个可以打印对象类型数组的通用方法。我写了以下代码:

class ArrayPrinter
{
    public <T extends Object[]> void printArray(T t) {
        for(Object o: t) {
            System.out.println(o);
        }
    }  
}
public class javaGenerics {
    public static void main(String args[]) {
        ArrayPrinter myArrayPrinter = new ArrayPrinter();
        Integer[] intArray = {1, 2, 3};
        String[] stringArray = {"Hello", "World"};
        myArrayPrinter.printArray(intArray);
        myArrayPrinter.printArray(stringArray); 
    }
}

但它不起作用并引发以下错误:

javaGenerics.java:7: error: unexpected type
    public <T extends Object[]> void printArray(T t) {
                            ^
  required: class
  found:    Object[]
1 error

我可以从错误中理解我提供了一个类名。但我不知道对象数组的类名是什么。

标签: java

解决方案


我会将 printArray 更改为

public <T extends Object> void printArray(T[] t) {
    for(Object o: t) {
        System.out.println(o);
    }
}  

也就是说,让 T 扩展 Object 而不是 Object 数组,并使 t 成为 T 的数组。

实际上根本不需要扩展 Object,因为类型参数始终是非原始类型

public <T> void printArray(T[] t) {
    for(Object o: t) {
        System.out.println(o);
    }
}

推荐阅读