`
zzmccnu
  • 浏览: 75816 次
  • 性别: 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虚拟机中的。
分享到:
评论

相关推荐

    list.toArray方法

    标题中的“list.toArray方法”指的是在Java编程语言中,List接口的一个重要方法——toArray()。这个方法用于将List集合中的元素转换成一个Object数组。在深入讲解之前,我们需要理解Java集合框架的基础,它包括Set、...

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

    Java ArrayList 类中的 `toArray(T[])` 方法的参数类型使用 `T` 而不是 `E`,这在初看之下似乎违背了泛型的主要目的——提供类型安全。然而,这样的设计实则是为了增加代码的灵活性和实用性。让我们深入探讨一下其中...

    将 Flex 集成到 Java EE 应用程序的最佳实践.docx

    ### 将 Flex 集成到 Java EE 应用程序的最佳实践 #### 一、引言 随着富互联网应用(RIA)技术的发展,诸如 Adobe Flex 这样的平台因其丰富的用户体验和高效的性能表现而逐渐受到开发者的青睐。Flex 提供了一种创建...

    java开发手册

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

    Java中数组的各种应用

    本文将深入探讨Java中数组的各种应用,旨在帮助初学者理解并掌握数组的使用。 一、数组定义与初始化 在Java中,数组可以看作是同类型元素的有序集合。例如,你可以创建一个整型数组来存储一系列的整数。数组的定义...

    Java1集合应用事例(课程作业)

    本课程作业主要关注Java集合的初步应用,适用于初学者深入理解和掌握这些概念。 在Java中,集合主要分为两种类型:List和Set。List是有序的集合,允许有重复元素,比如ArrayList和LinkedList;Set是无序且不包含...

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

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

    Java实训 Java高级应用编程 第2章 集合(共33页).ppt

    Java中的集合类是Java编程中不可或缺的一部分,它们用于存储和管理对象。集合框架是一个统一的接口层次结构,提供了丰富的操作和算法,使得处理对象集合变得简单高效。在Java中,集合类位于`java.util`包内,它们为...

    java api1.6、1.7

    Java API 1.6 和 1.7 是Java开发的关键组成部分,它们包含了Java标准库的详细文档,这些库是编写Java应用程序和服务器端程序的基础。这两个版本在Java发展历程中占据了重要地位,引入了许多新特性,优化了性能,并...

    java应用中如何捕抓SAS存储过程输出的流信息

    在Java应用程序中捕获SAS存储过程的输出流信息是一个涉及多步骤的过程,涉及到SAS编程和Java的集成。以下是如何实现这一目标的详细说明: 首先,我们需要理解SAS存储过程的基本概念。存储过程是一组预编译的SAS代码...

    JAVA中用到的json包

    在Java编程语言以及基于J2EE的企业级应用开发中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式。它易于人阅读和编写,同时也容易让机器解析和生成。JSON包在Java中扮演着至关重要的角色,...

    opencv-java460-windows-64

    OpenCV(开源计算机视觉库)是一个强大的跨平台计算机视觉库,它包含了大量的图像处理和计算机视觉算法,广泛应用于机器学习、深度学习、图像分析、人脸识别等领域。"opencv-java460-windows-64" 是OpenCV的一个特定...

    javacv配置+javacv人脸识别代码

    JavaCV(Java Computer Vision)是一个基于Java的计算机视觉库,它为Java和Android开发者提供了方便的接口来使用多个流行的计算机视觉框架,如OpenCV、FFmpeg等。在本项目中,我们将探讨如何配置JavaCV以及如何使用...

    java 数组的合并

    在Java编程语言中,数组是一种基础且重要的数据结构,用于存储同类型的元素序列。当我们需要将两个或多个数组合并成一个大的数组时,就需要用到数组的合并技术。本篇文章将详细探讨Java中如何实现数组的合并。 首先...

    java 数组求和计算

    在Java编程语言中,数组是一种数据结构,用于存储固定数量的相同类型的数据。数组求和计算是编程中常见的任务,特别是在处理数据集时。...在实际应用中,根据具体需求,可能还需要考虑性能优化、异常处理等方面的问题。

    java1.7API中文版

    Java 1.7 API中文版是Java开发人员的重要参考资料,它包含了Java 7版本的所有公共类、接口、方法和常量的详细说明。这个API文档是开发者理解和使用Java平台标准版(Java SE)7功能的关键工具。以下是Java 1.7 API中...

    java 去掉重复字符 三个方法

    这个方法利用了Java 8的特性,将字符串转换为整数流(每个字符的ASCII值),然后使用`distinct()`过滤重复,再通过`mapToObj()`将每个整数转换回字符,并最终使用`toArray()`生成新的字符串。 总结来说,去除Java...

    java中画带箭头的线

    在Java编程语言中,画带箭头的线是一项常见的图形绘制任务,主要应用于GUI(图形用户界面)开发或图表绘制。Java提供了丰富的图形库来支持这样的功能,其中最常用的是Java AWT(Abstract Window Toolkit)和Swing库...

    JAVA课件 辽宁工业大学

    Java编程语言是当今世界上最流行的编程语言之一,尤其在企业级应用开发中占据着主导地位。这份"JAVA课件 辽宁工业大学"源自辽宁工业大学软件学院,专为初学者设计,旨在提供一个简单易懂的学习路径,帮助他们快速...

Global site tag (gtag.js) - Google Analytics