Android SDK中找不到Arrays.copyOf?

Android SDK中找不到Arrays.copyOf?

原因很简单——选择的 API Level 不对。

java.util.Arrays.copyOf 方法:

  • 对于 JAVA 来说,是从 JAVA 1.6 版本开始加入的;
  • 对于 Android 来说,是从 API Level 9 才开始有的。

如果基于Android 2.2(API Level 8)开发,当然就没有copyOf方法。

解决办法?

最简单的办法当然是将API Level设置为9。如果一定要基于 API Level 8 开发,可以使用 System.arrayCopy 。

如果要寻找copyOf的替代方法,则可以使用这段代码:

 1//支持基础类型,结果需要转换类型
 2private final Object copyOf(Object $source, int $newLength) 
 3{
 4	Class<?> __type = $source.getClass().getComponentType();
 5	int __oldLength = Array.getLength($source);
 6	Object __target = Array.newInstance(__type, $newLength);
 7	int __preserveLength = Math.min(__oldLength, $newLength);
 8	System.arraycopy($source, 0, __target, 0, __preserveLength);
 9	return __target;
10}
11
12//支持泛型,但不支持基础类型数组,例如要处理byte[]需要使用上面的方法。
13private final <T> T[] copyOf(T[] $source, int $newLength)
14{
15	Class<?> __type = $source.getClass().getComponentType();
16	int __oldLength = Array.getLength($source);
17	@SuppressWarnings("unchecked")
18	T[] __target = (T[]) Array.newInstance(__type, $newLength);
19	int __preserveLength = Math.min(__oldLength, $newLength);
20	System.arraycopy($source, 0, __target, 0, __preserveLength);
21	return __target;
22}