反射补充知识—数组的反射及应用

数组的反射及应用

a、具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象。

b、代表数组的Class实例对象的getSuperClass()方法返回的父类为Object
对应的Class.

c、基本类型的一维数组可以被当作Objcet类型使用,不能当作Object[]类型使用。
;非基本类型的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用
d
Arrays.asList()方法处理int[]String[]时,有差异。

eArray工具类用于完成对数组的反射操作

f、怎么得到数组元素的类型

无法得到数组的类型,但可以得到数组元素的类型

int [] a = new int [3];

Object[] a = new Object[]{“a”,1};

a[0].getClass().getName(); //这里可以得到某个元素的类型

注意代码注释部为什么不能通过编译:下有无法通过图

 

import java.lang.reflect.Array; import java.util.Arrays; public class ArrayOfReflect { public static void main(String[] args) { int [] a1 = new int[]{1,2,3}; int [] a2 = new int[4]; int[][] a3 = new int [2][3]; String[] a4 = new String[]{"a", "b", "c"}; System.out.println(a1.getClass() == a2.getClass()); /* * 所有类型相同和维数相同的数组它的的类字节码都是一样的 * a1的类字节码 与a3、a4的类字节码永远都不会一样 * jdk1.5以后,编译器认为这2个类型是不一样的。 * 根本没有比较的需要。对于总是不成立的比较,其实是没有意义的 * 所以编译器会报错! System.out.println(a1.getClass() == a4.getClass()); System.out.println(a1.getClass() == a3.getClass()); */ System.out.println(a1.getClass().getName()); System.out.println(a1.getClass().getSuperclass().getName()); System.out.println(a4.getClass().getSuperclass().getName()); Object aObj1 = a1; Object aObj2 = a4; // Object[] aObj3 = a1; Object[] aObj4 = a3; Object[] aObj5 = a4; System.out.println(a1); System.out.println(a4); System.out.println(Arrays.asList(a1)); // 注意这里为什么不能打印出a1里的值,为了兼容jdk1.4,但jdk1.4只能传Object[] // 但a1是基本数据类型,无法打印出里面的值,那怎样解决呢 下面通过自己编写方法,来打印 System.out.println(Arrays.asList(a4)); printObject(a1); } private static void printObject(Object obj) { Class clazz = obj.getClass(); if (clazz.isArray()) { int len = Array.getLength(obj); for (int i = 0; i < len; i++) { System.out.print(Array.get(obj, i)); } } else { System.out.println(obj); } } }

运行结果:

true

[I

java.lang.Object

java.lang.Object

[I@de6ced

[Ljava.lang.String;@c17164

[[I@de6ced]

[a, b, c]

1

2

3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值