栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Java通用方法中正确返回通用数组?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Java通用方法中正确返回通用数组?

您看到的内容的解释是由于 类型擦除引起的 。这是编译器执行类型擦除

genericMethod()
样子: __

public static Object[] genericMethod(List input) {    Object[] res = new Object[input.size()];    int i = 0;    for (Object t : input) {        res[i] = t;        i++;    }    return res;}

换句话说,此方法将返回type数组

Object
。无法将an转换
Object[]
为an,
Integer[]
因为它们不是同一类型。如果希望方法能够动态返回所需的类型,则可以使用
Array.newInstance()
。这还需要传入想要的数组类型作为输入参数:

public static <T> T[] genericMethod(Class<T> clazz, List<T> input) {    @SuppressWarnings("unchecked")    T[] res = (T[]) Array.newInstance(clazz, input.size());    int i = 0;    for (T t : input) {        res[i] = t;        i++;    }    return res;}

现在,您的代码段将运行而不会出现错误:

linkedList<Integer> list = new linkedList<Integer>();    Integer[] i = genericMethod(Integer.class, list);

更新:

genericMethod2()
类型擦除后,您的第二种方法如下所示:

public static Object genericMethod2(List input) {    return input.get(0);}

它将返回输入列表的第一个元素,强制转换为

Object
。这是该方法的用法:

Integer j = genericMethod2(list);

编译器将尝试将输出强制转换

genericMethod2()
Integer

Integer j = (Integer)genericMethod2(list);

此强制转换是合法的,因为所有人

Integer
也都是
Object
,并且在这里成功,因为您传入了的集合
Integer
。第二种方法与您为我们强调的第一种方法不同。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392253.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号