当前位置: 首页 > 面试题库 >

编写通用方法以复制数组

刘和玉
2023-03-14
问题内容

在我的编程任务中,我被要求编写一种通用的复制方法,以从一个数组复制到相同大小和类型的数组。在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]; } 
}

问题答案:

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

java.lang.reflect中连同java.lang.Class中包括Java反射API。此方法同时使用这些类和它们的某些方法来构成一个通用arrayCopy方法,该通用方法将为我们找出类型。

更多信息:反射是什么,为什么有用?

可能不熟悉的语法

  • Class<?>正在使用通配符运算符?,该运算符基本上表示我们可以有一个Class未知类型的对象-类的通用版本Class
  • <T> 是代表原始类型的泛型运算符
  • ArrayArray类提供静态方法来动态创建和访问Java数组。即,此类包含的方法使您可以设置和查询数组元素的值,确定数组的长度以及创建数组的新实例。我们将使用Array.newInstance()

反射API中的方法

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

    private 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;
    

    }



 类似资料:
  • 问题内容: 我想定义一个在不同类型数字之间求和的方法: 上面的方法不起作用,因为类型擦除转换为 ,因此在…上未定义+运算符 那怎么办 谢谢。 问题答案: 您必须使用有界类型参数: 请注意,它使用double作为返回类型,因为这是覆盖最大范围值的原始数字类型- 一个或两个参数也可以。请注意,还具有和作为子类,它们可以表示范围之外的值。如果您想正确处理这些情况,将会使方法变得更加复杂(您必须开始不同地

  • 问题内容: 是否可以像用C ++一样用Java 编写 虚拟 方法? 或者,是否存在可以实现类似行为的适当Java方法?我可以举一些例子吗? 问题答案: 来自维基百科 在 Java中 ,默认情况下,所有非静态方法都是“ 虚拟函数”。 只有标记为 final的 方法(不能被覆盖)以及 私有方法 (未被继承)都是 非虚拟的 。

  • 如何编写一个toString()方法,为三名员工打印名称和computePay,小数点后两位?在我添加StringBuilder之前,该程序正在工作(将名称和周支付打印到命令行)。感谢任何帮助。

  • 在我的项目(spring boot应用程序)中,我有大约200个测试用例。最近,我们为缓存管理器(ehcache)实现了一个工厂bean,它位于我的启动类(@SpringBootApplication)中。 我的问题是,一旦带有工厂bean的启动类被一个测试用例执行,所有后续的测试用例都会失败,并出现错误。。。 “同一个VM中已存在另一个同名“appCacheManager”的CacheManag

  • 我有一个很大的结构,我知道从剖析,是昂贵的复制。我正在使用关键字传递这个结构的实例,效果很好。 现在我想把它作为一个参数传递给一个迭代器方法,而迭代器方法本身将值传递给其他迭代器方法--但是不允许使用,这意味着每次将值传递给一个方法时都会复制该值。 这里的上下文是一个包含视频游戏保存状态的结构,迭代器方法是一个“加载”方法,它在Unity game engine(使用迭代器实现协同)中将保存数据的

  • 问题内容: 问题是:编写一个交换两个变量的方法。这两个变量应该是原语。它不需要是通用的,例如两个变量。有办法吗? 问题答案: 如果不使用数组或对象,不可以,无法在方法中进行操作。