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 = 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 =
null
;
Class<?> type = original.getClass();
if
(type.isArray()) {
int
length = Array. getLength(original);
Class<?> elementType = type.getComponentType();
// 根据数组组件的类型,来扩容
returnValue = Array. newInstance(elementType, length*2);
System. arraycopy(original, 0, returnValue, 0, length);
}
return
returnValue;
}
}