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}
- 文章ID:1664
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/copyof_in_android_api8/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。