Android SDK中找不到Arrays.copyOf?

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:Android SDK中找不到Arrays.copyOf?
  • 本文链接:http://zengrong.net/post/1664.htm

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的替代方法,则可以使用这段代码:

//支持基础类型,结果需要转换类型
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;
}