使用反射,如何获得数组对象的元素类类型

littlegang 2010-03-24 03:32:16
假设,某个(不确定类型)数组对象.class 是以参数形式传入的,现在需要知道该数组成员元素的 类 ,该如何实现?

例:
某处定义的
SomeClass [] o;

需要调用GetElementClass(o.getClass()) 得到表明 SomeClass的Class类对象

该如何实现这个函数? Class<?> GetElementClass(Class <?> objClass)

对于 AnyClass [] a;

GetElementClass(a.getClass()) 要能得到表明 AnyClass的Class对象

目前我只能判断到 objClass.isArray(), 但如何知道相当于a[0]的类型呢?

...全文
385 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
poFate 2010-03-24
  • 打赏
  • 举报
回复
泛型数组?。。。。。
如果是的话,那这样是不可行的
littlegang 2010-03-24
  • 打赏
  • 举报
回复
没法依赖于一定存在具体数组的对象,
因此也没法取得数组的第一个元素这样的某个对象
poFate 2010-03-24
  • 打赏
  • 举报
回复
你先取得数组的第一个元素
这样再反射不就容易了嘛
APOLLO_TS 2010-03-24
  • 打赏
  • 举报
回复
一般JVM把数组数据类型规划为LString LInteger之类的。截取一下看看!
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究, 1/15 页 1 1.1 利用 Java 实现地球系动画完整实现实例(第 3 部分) 1.1.1 进一步扩展程序加载图像文件 1、GUI 中显示图像 drawImage()方法 public boolean drawImage(Image img,int x,int y,ImageObserver observer)实现在指定位置 并且按原始大小绘制指定的 Image,其中的各个参数如下: img 代表要绘制的图像对象, 而 x、y 是指要绘制的指定图像的矩形的左上角所处的位置, observer 是加载图像时的图像观察器。 JApplet 已经实现了 ImageObserver 接口, 它可以作为加载图像时的图像观察器。 将 this 作为最后一个参数传递给 drawImage()便可将 Applet 对象传递过去;或者直接采用 null 对象 作为最后一个参数。 2、EarthPlanetApplet 程序代码如下 (1)回顾 Java 中的数组 数组也是一个对象,并且数组也是作为方法的对象引用值来传递的。 Image allImagesArray[]= new Image[NUMBER_IMAGES]; 但在创建数组的时候不使用小括号传参,因此在数组中是没有构造方法的。数组继 承自 Object (因为 new Object[0].getClass().getSuperClass()是 Object.class)。 可以获得数组所在的 Class 对象名 Class imageArrayInstance = Image[].class; 而利用 imageArrayInstance.getName()方法可以获得数组所在名。 数组不能够通过普通的反射方式来创建一个实例。 如 果 强 行 执 行 imageArrayInstance.newInstance(); 就 会 得 到 下 面 的 错 误 : java.lang.InstantiationException。 (2)Java 中的数组为静态的 1) 所谓静态的数组是指其长度大小是固定的(利用 length 属性可以获得实际的长度,因 为在每个数组对象中都有 1 个 length 的 final 属性变量,这个变量指定了数组的大小, 即数组可以容纳元素的个数。 由于直接暴露成员变量, 因此不是一种很 OO 的风格! ) , 也就是不能在程序运行过程中添加新的元素和删除原有的元素, 要动态添加新的元素 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究, 2/15 页 2 数据必须要用到动态数组。 2) 因为数组是一种定义了相似数据元素索引化集合的数据结构, 这个集合中元素的个数 是固定的;数组下标及数组名是用来给访问者提供访问数组的途径,但数据的下标从 0 开始。 3) Java 中的数组跟 C/C++这些语言中的数组的语法结构很相似, 但是 Java 去掉了 C/C++ 中的可以使用指针来访问元素的功能。 注意: 1) 数组是一个空(自身没有声明任何成员变量、成员方法、构造函数和 Annotation 等),编译器其实是对 Array.length()这样的语句做了特殊的处理,直接编译成 arraylength 指令。 2) 相比 C/C++中的数组,Java 数组在安全性方面进行全面地改进。C/C++常遇到的缓存 区溢出或数组访问越界的问题,在 Java 中不再存在。因为 Java 使用特定的指令访问 数组元素,这些指令都会对数组的长度进行检查。如果发现越界,就会抛出 java.lang.ArrayIndexOutOfBoundsException。 (3)Java 中的动态数组——其实为 Java 中的集合 为什么要应用静态数组而不使用 Java 中的集合(如 ArrayList 等)产生动态数组?主要 是考虑到效率和两方面的问题。 1) 效率: 要想保存和随机访问一系列对象, 此时的对象引用效率最高的方法莫过于数组。 2) :Java 中的集合都把对象当作没有具体对待(它们将其当作 Object 处理),而 Object 是 Java 中所有的根,从某种角度看这种处理方法是非常 合理的,我们只需构建一个集合,然后所有 Java 对象都可保存到集合中。但由于数 组规定必须为相同的数据,因此创建一个数组时可让它容纳一种特定的。这 意味着可进行编译时间的检查防范自己设置了错误的或者错误地提取了一 种,而不是运行时的 Exception。 (4)静态创建数
该课程由付强老师主讲,系统的、全面的、具体的讲解了java入门的知识。可以使初级的学员入门。Java入门Java的历史、Java的版本、Java的优势、软件行业前景Java开发环境搭建、编写Java入门练习虚拟机的运行机制、Java的平台无关性、虚拟机垃圾回收机制基础语法关键字、标识符、Java数据、基础数据、取值范围变量、常量、三种注释、生成doc文档、运算符、表达式if语句、switch语句、嵌套判断for语句、while语句、do-while语句、嵌套循环对象面向过程和面向对象的区别的构成、访问修饰符、对象的内存分配this关键字、按值传递与按引用传递、对象的初始化顺序高级特性的继承、父子的初始化顺序、单继承性方法的覆盖、重载、super关键字、多态、instanceof关键字、强制转换、static关键字、final关键字数组和枚举一维数组的应用及内存分配多维数组的应用及内存分配数组的复制、数组的按引用传递排序算法:冒泡、直接选择、插入选择、希尔、快速、归并、堆排序Arrays工具的应用枚举的应用常见使用Object的底层及应用、ObjectsString的底层及应用、正则表达式StringBuffer和StringBuilder的底层及应用Math的应用、包装的应用日期的应用:Date、DateFormat、Calendar、LocalDateTime、Instant、LocalDate、MonthDay、ZonedDateTime、YearMonth、新旧日期转换BigInteger和BingDecimal、DecimalFormatSystem、Scanner抽象和接口抽象的规则及应用接口的规则及应用默认方法、静态方法、函数式接口、Lambda表达式异常异常的定义异常的处理:抓(try-catch-finally)、抛(throws)异常的分、自定义异常的应用、throw关键字集合框架集合框架结构:接口、实现Collection接口的方法、Set接口的方法、List接口的方法、Map接口的方法Array、Linked、Hash、Tree底层实现原理泛型的作用、Collections工具、历史集合I/O流Path的原理及应用、Files的原理及应用文件字节流FileInputStream的原理及应用对象、缓冲流、数据流的原理及应用字符流的原理及应用多线程进程与线程的概念、查看线程对象Java内存模型线程的创建与启动:扩展Thread、实现Runnable接口、实现Callable接口、线程池线程状态的转换:新建、就绪、运行、阻塞、死亡线程的调度:sleep、yield、join、interrupt、wait后台线程、定时任务线程的并发与同步、同步锁、同步块、线程安全的Lock接口、CAS、volatile修饰符内部成员内部、本地内部的应用匿名内部的原理及引用、Lambda表达式设计模式基础设计模式概念、框架概念7大设计原则:开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特原则、里氏替换原则、合成复用原则单例模式、工厂模式、模板模式、代理模式、装饰模式、适配器模式、外观模式、策略模式、观察者模式、命令模式、备忘录模式、观察者模式反射反射包Class使用反射获取属性、方法、构造器通过反射创建对象/通过反射调用方法反射的应用

62,610

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧