`
tianlihu
  • 浏览: 311093 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

利用Java的反射机制编写的可以扩展任意数组大小的方法

阅读更多
原文链接

import java.lang.reflect.Array;

public class ArrayGrowTest {
	public static void main(String[] args) {
		int[] a = { 1, 2, 3 };
		a = (int[]) goodArrayGrow(a);
		arrayPrint(a);
		String[] b = { "Tom", "Dick", "Harry" };
		b = (String[]) goodArrayGrow(b);
		arrayPrint(b);
		System.out.println("The following call will generate an exception");
		b = (String[]) badArrayGrow(b);
	}

	public static Object[] badArrayGrow(Object[] a) {
		int newLength = a.length * 11 / 10 + 10;
		Object[] newArray = new Object[newLength];
		System.arraycopy(a, 0, newArray, 0, a.length);
		return newArray;
	}

	public static Object goodArrayGrow(Object a) {
		Class<?> c1 = a.getClass();
		if (!c1.isArray()) {
			return null;
		}
		Class<?> componentType = c1.getComponentType();
		int length = Array.getLength(a);
		int newLength = length * 11 / 10 + 10;
		Object newArray = Array.newInstance(componentType, newLength);
		System.arraycopy(a, 0, newArray, 0, length);
		return newArray;
	}

	public static void arrayPrint(Object a) {
		Class<?> c1 = a.getClass();
		if (!c1.isArray()) {
			return;
		}
		Class<?> componentType = c1.getComponentType();
		int length = Array.getLength(a);
		System.out.print(componentType.getName() + "[" + length + "]={ ");
		for (int i = 0; i < Array.getLength(a); i++) {
			System.out.print(Array.get(a, i) + ",");
		}
		System.out.println("}");
	}
}




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics