In Java, variable arity methods (methods with variable arguments) use an elipsis (...) to indicate that the method accepts a variable number of arguments.当您将数组传递给变量ARITY方法时,数组元素被视为单个参数,将其视为该方法。
考虑以下代码:在此示例中,MyFormat方法采用一个可变数量的参数(由... args表示),并使用string.format方法格式化字符串。问题是ARGS被视为一个对象[]数组,而不是单个参数。要解决这个问题,您可以利用以下事实:t ...是t []的句法糖。
class A { private String extraVar; public String myFormat(String format, Object... args) { return String.format(format, extraVar, args); } }public static string ezformat(object ... args) 字符串格式= new String(new Char [args.length])。替换(“ \ 0”,“ [%s]”); return string.format(格式,args); } 公共静态void main(字符串... args){ system.out.println(ezformat(“ a”,“ b”,“ c”)); //打印“ [a] [b] [c]” }
在此示例中,ezformat方法采用一个可变数量的参数并返回格式的字符串。因为string.format也是一个可变的方法,所以将每个参数传递给ezformat作为单个参数。 void count(对象... objs){ system.out.println(objs.length); } 计数(null,null,null); //打印“ 3” 计数(null,null); //打印“ 2” 计数(null); //抛出java.lang.nullpointerexception !!!
...将导致NullPoInterException。为了避免这种情况,您可以将null参数作为单独的数组或对象传递,例如:
{null}); //打印“ 1” 计数((对象)null); //打印“ 1”添加额外的参数将额外的参数添加到传递给变量Arity方法的数组中,您可以使用append()和prepend()和prepend()和prepend()的辅助方法来修改数组: 最终int n = arr.length; arr = java.util.arrays.copyof(arr,n 1); arr [n] = lastElement; 返回arr; } 静态
传递primitives
public static String ezFormat(Object... args) { String format = new String(new char[args.length]).replace("\0", "[ %s ]"); return String.format(format, args); } public static void main(String... args) { System.out.println(ezFormat("A", "B", "C")); // prints "[ A ][ B ][ C ]" }mynumbers = {1,2,3}; system.out.println(ezformat(mynumbers)); //打印“ [[I@13c5982]” integer [] mynumbers = {1,2,3}; system.out.println(ezformat(mynumbers)); //打印“ [1] [2] [3]”
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3