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

留言

2012-08-02
次访问