所有Java基本类型的参数?
我有这个功能所有Java基本类型的参数?,java,primitive-types,Java,Primitive Types,我有这个功能 static public void Print(Object[] arr) { for(int i = 0; i < arr.length; i++) System.out.println(i + " => " + arr[i]); } 静态公共作废打印(对象[]arr){ 对于(int i=0;i”+arr[i]); } 我想对每个基元类型数组使用它。在不为每个基元类型重写它的情况下,难道没有任何方法可以做到这一点吗 注意:这只是一个示例
static public void Print(Object[] arr) {
for(int i = 0; i < arr.length; i++)
System.out.println(i + " => " + arr[i]);
}
静态公共作废打印(对象[]arr){
对于(int i=0;i”+arr[i]);
}
我想对每个基元类型数组使用它。在不为每个基元类型重写它的情况下,难道没有任何方法可以做到这一点吗
注意:这只是一个示例函数。我想知道是否有这种技术。是的,这叫做泛型。泛型是C++中的模板——一种变量类型。
请看这里:原语数组是java中的对象,因此可以使用
Object
-type作为参数(注意,不是对象数组,而是对象)。问题是,您仍然需要将其转换为正确的类型,以便能够迭代数组
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
您可以像这样使用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]);
}
}
公共静态无效打印(T[]arr)
{
对于(int i=0;i”+arr[i]);
}
}
但这只适用于基本包装类的数组,而不适用于基本数组。不,这是不可能的。数组元素类型未包装,
Object[]
形式参数不适用于例如int[]
实际参数。每个基元类型必须编写一个方法,如中所示。丑陋,但这是唯一的方法。您不能对基本体执行此操作。如果您的设计允许,我强烈建议您改用对象版本。@VinceEmigh-因为基本体不是对象,并且没有语言级别支持从基本体类型到对象类型的“裸”自动装箱。如果尝试传入“原始”基本体数组,如调用print(new float[5]),这将不起作用
->“不适用于参数(浮点[])”。基元数组不是自动装箱的。@esaj,同意。更新了我的答案,提到了这一点。谢谢,谢谢。这对我很有用;静态公共无效打印(E[]arr)It。。。做什么Java版本?请出示电话号码好吗?在链接的wiki页面中:“public T[]toArray(T…elements){return elements;}
在这种情况下,您也不能使用本机类型,例如:Integer[]array=toArray(1,2,3,4,5);”-我得到了int[]
和该签名的“不适用”。哦,对不起,它不能使用int[]类型参数,只有Integer[]。你是对的。我不能为此改变整个结构。我认为这是不可能的。