risc-v中文社区

 找回密码
 立即注册
查看: 878|回复: 0

[原创] java for risc-v系列知识讲座(16)--- Object数组转其它类型的...

[复制链接]

20

主题

23

帖子

96

积分

注册会员

Rank: 2

积分
96
发表于 2021-8-17 11:03:10 | 显示全部楼层 |阅读模式
Object[] objs = new Ojbect[3];objs[0=1;
objs[1]=2;
objs[2]=3;
如果将objs强转为Integer[]:
Integer[] intarr = (Integer[])objs;
则会出现:java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer异常。
所以要想将object[]转为其它类型数组则可以采用如下泛型函数转换方式:

//转换函数,将object[]转换为需要的数据类型数组
//其实也就是说返回的类型是泛型
//public static 后面的<T>表示返回值定义一个泛型T,然后T[]表示函数返回值的类型是一个数组
//如果<T>后面是T则表示函数返回值的类型是T类型

public static <T> T[] convertObjArr2ClassTArr(Class<T> destType,Object[] srcArr) {
  if(destType == null)
     return null;
  if(srcArr == null)
     return null;
  T[] arr = null;
  try {
    arr =  (T[])Arrary.newInstance(destType,srcArr.length);
   System.arraycopy(srcArr,0,arr,0,srcArr.length);
  return arr;
  }
  catch(Exception e{}
  return null;
}
使用代码:
Object objs[] = new Object[3];
objs[0] = 1;
objs[1] = 2;
objs[2] = 3;
//要想使用返回值是泛型的函数,接收类型直接写实际需要的类型即可,不存在强制转换
intarr = convertObjArr2ClassTArr(Integer.class,objs);
System.out.println("------------");
for(Integer i:intarr)
        System.out.println(i);


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-5-4 21:37 , Processed in 0.013660 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表