首页 > 代码库 > Java 数组反射(Array Reflection)
Java 数组反射(Array Reflection)
1. 在不确定某个参数或对象是否是数组的时候,就可以使用发射机制,把该对象的Class对象传给Array.isArray(Class<?>) 方法进行判断。通过Class对象的 getComponentType() 方法可以进一步知道数组组件的具体类型,数组如果是多维的话可以递归调用Array.isArray;
2.Array.getLength(class)可以得到数组的大小;
3.可以运行时利用反射机制来创建某种类型的数组,利用 java.lang.reflect.Array.newInstance()方法(有两种形式),同样在创建的时候也可以递归的调用该方法。
下面是两个例子
1.利用反射创建,填充,显示数组:
public class ArrayCreate {
public static void main (String args[]) {
// 创建一个数组
Object array = Array. newInstance( int. class, 3);
printType(array);
fillArray(array);
displayArray(array);
}
// 打印這個對象的数组类型和大小
private static void printType (Object object) {
Class<?> type = object.getClass();
if (type.isArray()) {
Class<?> elementType =type.getComponentType();
System. out .println("Array of: " + elementType);
System. out .println("Array size: " +Array.getLength(object));
}
}
// 填充数组
private static void fillArray(Object array) {
int length = Array. getLength(array);
Random generator = new Random(System.currentTimeMillis());
for ( int i=0; i<length; i++) {
int random = generator.nextInt();
//Sets the value of the indexed component of the specified
//array object to the specified int value.
Array. setInt(array, i, random);
}
}
private static void displayArray(Object array) {
int length = Array. getLength(array);
for ( int i=0; i<length; i++) {
int value =http://www.mamicode.com/ Array. getInt(array, i);
System. out.println( "Position: " + i + ", value: " + value);
}
}
}
2. 数组容量扩容:
public class DoubleArray2 {
public static void main (String args[]) {
int array[] = {1, 2, 3, 4, 5};
System. out.println( "Original size: " + array.length );
System. out.println( "New size: " + ((int [])doubleArray(array)). length);
System. out.println((( int [])doubleArray(array))[1]);
}
static Object doubleArray(Object original) {
Object returnValue =http://www.mamicode.com/ null ;
Class<?> type = original.getClass();
if (type.isArray()) {
int length = Array. getLength(original);
Class<?> elementType = type.getComponentType();
// 根据数组组件的类型,来扩容
returnValue = http://www.mamicode.com/Array. newInstance(elementType, length*2);
System. arraycopy(original, 0, returnValue, 0, length);
}
return returnValue;
}
}
Java 数组反射(Array Reflection)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。