java - 为泛型类型扩展 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
我可以从错误中理解我提供了一个类名。但我不知道对象数组的类名是什么。
解决方案
我会将 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);
}
}
推荐阅读
- sql - 有没有办法在 Spark SQL 中用空值替换空数组结构?
- manjaro - gvfsd-smb 在 Manjaro Linux 上做了什么?
- python - Python 查找不同的 Windows 版本
- php - laravel 8 多用户使用 auth 命令重定向到不同的页面
- openedge - 将前导零添加到正在进行的字符变量 4gl
- html - 绝对定位的伪元素出现在 DOM 中的其余内容之前
- laravel - 如何更改图片上传目录并在 laravel 中查看图片 url
- github - 具有多个存储库的单个自定义子域的 Github 页面(使用路径)
- python-3.x - Docker - 无法运行脚本
- javascript - 如果文件大小或扩展名不正确,如何显示警报