Java 编写一个通用方法来复制数组

Java 编写一个通用方法来复制数组,java,arrays,copy,Java,Arrays,Copy,在我的编程任务中,我被要求编写一个通用复制方法,将一个数组复制到大小相同且类型相同的数组中。这在Java中可能吗?我尝试的每件事最后都出现了一些“通用数组创建”错误。我迷路了,不知道怎么解决这个问题 public class copyArray<AnyType>{ public copyArray(AnyType[] original){ AnyType[] newarray = new AnyType[original.length]; for

在我的编程任务中,我被要求编写一个通用复制方法,将一个数组复制到大小相同且类型相同的数组中。这在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]; } 
}
公共类copyArray{
公共copyArray(AnyType[]原件){
AnyType[]newarray=newanytype[original.length];

对于(int i=0;i您可以使用反射的概念来编写一个通用的复制方法,该方法可以在运行时确定类型。简而言之,反射是在运行时检查类、接口、字段和方法的能力,而不需要在编译时知道类、方法等的名称

这个方法使用这两个类和它们的一些方法来创建一个通用的
arrayCopy
方法,它将为我们找到类型

更多信息:

可能不熟悉的语法
  • 使用通配符操作符
    ,它基本上表示我们可以拥有未知类型的
    对象-类
  • 的通用版本
  • 是表示
  • Array
    Array类提供了静态方法来动态创建和访问Java数组。也就是说,该类包含允许您设置和查询数组元素值、确定数组长度以及创建数组新实例的方法。我们将使用
    Array.newInstance()
  • 来自反射API的方法
  • getClass()
    -返回一个数组,该数组包含表示所有公共类的类对象和作为所表示类对象成员的接口
  • getComponentType()
    -返回表示数组的组件类型(即int等类型)的类
  • newInstance()
    -获取数组的新实例。
  • private <T> T[] arrayCopy(T[] original) {
    
        //get the class type of the original array we passed in and determine the type, store in arrayType
        Class<?> arrayType = original.getClass().getComponentType();
    
        //declare array, cast to (T[]) that was determined using reflection, use java.lang.reflect to create a new instance of an Array(of arrayType variable, and the same length as the original
        T[] copy = (T[])java.lang.reflect.Array.newInstance(arrayType, original.length);
    
        //Use System and arraycopy to copy the array
        System.arraycopy(original, 0, copy, 0, original.length);
        return copy;
    }
    
    private T[]阵列副本(T[]原件){
    //获取我们传入的原始数组的类类型并确定类型,存储在arrayType中
    类arrayType=original.getClass().getComponentType();
    //声明数组,转换为使用反射确定的(T[]),使用java.lang.reflect创建数组的新实例(arrayType变量,长度与原始数组相同)
    T[]copy=(T[])java.lang.reflect.Array.newInstance(arrayType,original.length);
    //使用System和arraycopy复制阵列
    System.arraycopy(原件,0,副本,0,原件,长度);
    返回副本;
    }
    
    更简单的解决方案是使用任何数组的现有
    clone()
    方法(除非您的任务明确告诉您不要使用
    clone()
    ):

    公共静态T[]阵列副本(T[]原件){
    返回original.clone();
    }
    

    实际上,您根本不需要这样的通用助手方法,您可以直接调用
    clone()
    方法(它也适用于基本数组)。

    您如何发布这些尝试?这样我们就可以“提示”您在正确的轨道上点击上面的链接,将代码添加到问题中,而不是将其转储到注释中。@3kings我添加了我在上面尝试过的代码。对于初学者来说,您不能以这种方式实例化泛型数组。@MikeSchmidt您应该看到下面的答案。这将对您有所帮助。
    public static <T> T[] arrayCopy(T[] original) {
        return original.clone();
    }