`
zzmccnu
  • 浏览: 74071 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java 转型—应用toArray()的一点启示

阅读更多
Java 转型—应用toArray()的一点启示

Java支持向上和向下转型,有这样一段代码:
private ArrayList<String> fTypeNameList;
public String[] getTypeNames() {
	return (String[])fTypeNameList.toArray();
}

这段代码编译能通过,但是运行时却抛出了异常。百思不得其解,后来想想,原来是一个简单的转型问题。改成下面的代码后,问题解决。
private ArrayList<String> fComponentTypeNameList;
public String[] getTypeNames() {
	int size = fTypeNameList.size();
	String[] strs = new String[size];
	return fTypeNameList.toArray(strs);
}

总结
Java中允许向上和向下转型,但是这个转型是否成功是根据Java虚拟机中这个对象的类型来实现的。Java虚拟机中保存了每个对象的类型。而数组也是一个对象。数组的类型是[Ljava.lang.Object。把[Ljava.lang.Object转换成[Ljava.lang.String是显然不可能的事情,因为这里是一个向下转型,而虚拟机只保存了这是一个Object的数组,不能保证数组中的元素是String的,所以这个转型不能成功。数组里面的元素只是元素的引用,不是存储的具体元素,所以数组中元素的类型还是保存在Java虚拟机中的。
分享到:
评论

相关推荐

    Java ArrayList.toArray(T[]) 方法的参数类型是 T 而不是 E的原因分析

    主要介绍了Java ArrayList.toArray(T[]) 方法的参数类型是 T 而不是 E的原因分析的相关资料,需要的朋友可以参考下

    java开发手册

    Java常用技术篇介绍字符串、集合、内部类、线程和相关算法的应用;界面编程篇介绍Java的Swing编程、相关布局使用的控件和图像处理等知识;高级技术篇介绍网络编程的基本知识、输入/输出流的使用和JDBC数据库开发技术...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    现有的 Java EE 应用 假定我们已经拥有了一个管理雇员信息的 Java EE 应用,名为 EmployeeMgmt-Server,结构如 图 1 所示: 图 1. Java EE 工程结构 这是一个典型的 Java EE 应用,使用了流行的 Spring 框架。...

    list.toArray方法

    NULL 博文链接:https://jiaguwen123.iteye.com/blog/1679345

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    资源简介现有的 Java EE 应用 假定我们已经拥有了一个管理雇员信息的 Java EE 应用,名为 EmployeeMgmt-Server,结构如 图 1 所示: 图 1. Java EE 工程结构 这是一个典型的 Java EE 应用,使用了流行的 ...

    java中字节数组拼接

    使用链式编程写法实现Java中byte数组的拼接。例如byte[] bytes = ByteUtils.get().add(0x41).add(07).add(11).add("15288930000").add(0x45).toArray();更灵活用法请参考Mybytes

    Java开发手册-华山

    此版发布于2019年06月15日,并正式更名为《Java开发手册》,用发布者的话说:“它属于所有参与其中的贡献者,也以此聊表我们对全球Java开发者的感谢”。此版升级内容包括: 1)新增21条新规约。比如,switch的空指针...

    Java开发手册-华山版-1.5.0.pdf

    2019.06.19 《阿里巴巴Java开发手册》时隔一年,发布更新1.5.0华山版。...比如,IFNULL 的判断、集合的 toArray、日志处理等。 4)完善若干处示例。比如,命名示例、卫语句示例、enum 示例、finally 的 return示例等。

    java压缩文件源码--ZipUtils

    Object[] fileArray = allFiles.toArray(); BufferedInputStream in = null; FileInputStream fis = null; ZipOutputStream zos = null; FileOutputStream fos = null; try { fos = new ...

    新版java开发手册(华山版).zip

    《Java开发手册》最新版涵盖了史无前例的三大升级: 1.新增21条新规约。比如,switch的空指针问题、浮点数的比较、无泛型限制引起的类型混乱、加锁与解锁的注意事项、YYYY的日期格式问题等; 2.修改描述112处。...

    阿里巴巴Java开发手册1_5_0.zip

    《Java开发手册》更新版,涵盖史无前例的三大升级: 1.新增21条新规约。比如,switch的空指针问题、浮点数的比较、无泛型限制引起的类型混乱、加锁与解锁的注意事项、YYYY的日期格式问题等; 2.修改描述112处。...

    java解析json

    return jsonArray.toArray(); } public static void setDateFormat2Java() { JSONUtils.getMorpherRegistry().registerMorpher( new DateMorpher(new String[] { "yyyy-MM-dd", "yyyy-MM-dd HH:mm...

    对于java map类排序

    Object[] unsort_key = unsort_map.keySet().toArray(); Arrays.sort(unsort_key); for (int i = 0; i ; i++) { result.put(unsort_key[i].toString(), unsort_map.get(unsort_key[i])); } return result....

    Java编码规范总结

    修复建议:使用c.toArray(new String[c.size()])。 6.不良实践 - 方法返回boolean类型返回了null。 7.错误用法 - "."用作正则表达式。 修复建议:String的split方法传递的参数是正则表达式,正则表达式本身用到...

    解决Laravel5.5下的toArray问题

    今天小编就为大家分享一篇解决Laravel5.5下的toArray问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    关于List.ToArray()方法的效率测试

    之前一直认为因为List内部实现是数组,ToArray的实现只是将数组返回出去而已。 今天测了一下发现并不是那样 var a = new List(); for (int i = 0; i &lt; 10000; i++) { a.Add(i); } DebugHelper.StartWatch(); ...

    jQuery学习笔记之toArray()

    jquery.toArray()是将jQuery对象转换成数组,我们来分析下

    对接openai接口,采用现有的开源前端实现ai对话(Java)

    .antMatchers(ArrayUtil.toArray(authUrlWhiteListProperties.getWhiteUrls(), String.class)).permitAll() //开始进入 SecurityContextPersistenceFilter-&gt;doFilter方法 FilterSecurityInterceptor 中的doFilter-...

Global site tag (gtag.js) - Google Analytics