在我的编程任务中,我被要求编写一种通用的复制方法,以从一个数组复制到相同大小和类型的数组。在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>
是代表原始类型的泛型运算符Array
Array类提供静态方法来动态创建和访问Java数组。即,此类包含的方法使您可以设置和查询数组元素的值,确定数组的长度以及创建数组的新实例。我们将使用Array.newInstance()
getClass ()
-返回一个包含Class对象的数组,该Class对象代表所有公共类和接口,这些公共类和接口都是所表示的类对象的成员。getComponentType()
-返回表示数组的组件类型(即int,等类型)的类。newInstance()
-获取数组的新实例。
private
//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(使用迭代器实现协同)中将保存数据的
问题内容: 问题是:编写一个交换两个变量的方法。这两个变量应该是原语。它不需要是通用的,例如两个变量。有办法吗? 问题答案: 如果不使用数组或对象,不可以,无法在方法中进行操作。