编写通用方法来复制数组

时间:2015-11-15 03:36:29

标签: java arrays copy

对于我的编程任务,我被要求编写一个通用的复制方法,从一个数组复制到一个相同大小和类型的数组。这在Java中甚至可能吗?我尝试的一切都以一些“通用数组创建”错误结束。我迷路了,不知道怎么解决这个问题!

public class copyArray<AnyType>{

   public copyArray(AnyType[] original){ 

     AnyType[] newarray = new AnyType[original.length];  

     for(int i =0; i<original.length; i++){ 
        newarray[i] = original[i]; } 
}

2 个答案:

答案 0 :(得分:5)

您可以使用反射的概念来编写可以在运行时确定类型的通用复制方法。简而言之,反射是在运行时检查类,接口,字段和方法的能力,而无需在编译时知道类,方法等的名称。

java.lang.Reflectjava.lang.Class一起构成了Java Reflection API。这个方法使用这两个类和它们的一些方法来制作一个通用的arrayCopy方法,它将为我们找出类型。

更多信息:What is reflection and why is it useful?

可能不熟悉的语法

  • Class<?>正在使用通配符运算符?,它基本上表示我们可以拥有一个未知类型的Class对象 - 类{{的通用版本1}}。
  • Class是一个代表raw type
  • 的通用运算符
  • <T> Array类提供动态创建和访问Java数组的静态方法。即,此类包含的方法允许您设置和查询数组元素的值,确定数组的长度,以及创建新的数组实例。我们将使用Array
  • 来自反射API的方法

  • Array.newInstance() - 返回一个包含Class对象的数组,这些对象表示作为所表示的类对象成员的所有公共类和接口。
  • getClass () - 返回表示数组的组件类型(类型,即int等)的类。
  • getComponentType() - 获取数组的新实例。
  • newInstance()

    答案 1 :(得分:2)

    更简单的解决方案是使用任何数组的现有clone()方法(除非您的赋值明确告知不要使用clone()):

    public static <T> T[] arrayCopy(T[] original) {
        return original.clone();
    }
    

    实际上你根本不需要这样的通用辅助方法,你可以直接调用clone()方法(它也可以用于原始数组)。