我有这个功能;
static public void Print(Object[] arr) {
for(int i = 0; i < arr.length; i++)
System.out.println(i + " => " + arr[i]);
}
我想对每个基本类型数组使用它。如果没有为每种原始类型覆盖它,有没有办法做到这一点?
注意:这只是一个示例功能。如果有技术,我想知道这项技术。
答案 0 :(得分:4)
原始数组是java中的对象,因此您可以使用Object
- 类型作为参数(注意,不是对象数组,而只是对象)。问题是,您仍然需要将其强制转换为正确的类型以便能够迭代数组。
public class ArrayTest
{
public void paramTest(Object args)
{
if(args instanceof int[])
{
System.out.println("int-array");
}
if(args instanceof float[])
{
System.out.println("float-array");
}
}
@Test
public void test()
{
paramTest(new int[5]);
paramTest(new float[5]);
}
}
输出:
int-array
float-array
答案 1 :(得分:2)
不,这是不可能的。数据元素类型未包装,Object[]
形式参数不适用于例如int[]
实际参数。您必须为每个基本类型编写一个方法,如java.util.Arrays
中所示。丑陋,但唯一的方法。
答案 2 :(得分:1)
是的,那叫做泛型。泛型 - 就像c ++中的模板 - 变量类型。
答案 3 :(得分:0)
您可以使用这样的Java泛型来实现您的目标,Number
java.lang.Number
是
public static <T extends Number> void print(T[] arr)
{
for (int i = 0; i < arr.length; i++)
{
System.out.println(i + " => " + arr[i]);
}
}
但这只适用于原始包装类的数组,而不适用于Primitive数组。