方法重载是一种用于完成各种任务的技术,每项任务都由作为参数传递的变量的数量和类型决定。每个重载方法都包含基于传递的参数的不同实现。然而,当我们想要传递任意数量的参数时,就需要varargs。问题随之而来:当传递的参数数目不确定时,我们如何区分不同的任务?在这种情况下,我们如何有效地处理各种工作?
2exbekwf1#
varargs是传递数组的简写。例如,代替写作
public static void main(String[] args) { for(String arg : args) System.out.println(arg);
字符串你可以写
public static void main(String... args) { for(String arg : args) System.out.println(arg);
型主要的区别是调用者现在可以写
main("hello", "world");
型
bfhwhh0e2#
例如:
String.format("My name is %s", myName); String.format("My name is %s %s", myFirstName, myLastName); String.format("My name is %s %s and I am %d years old", myFirstName, myLastName, myAge);
字符串
a5g8bdjr3#
假设你想计算四边形的体积。第一个场景是计算矩形的面积,它需要三个参数。第二种情况是,如果您正在计算只需要一个参数的立方体的面积,第三种情况可能是没有传递任何值。让我们看一个例子:仅用于说明目的
Class Volume(){ Volume(){ this (-1, -1, -1) } Volume(int x){ this (x, x, x) } volume(int x, y, z) length = x; breadth = y; height = z; } public int getVolume(){ return length*breadth*height }
字符串这是已知的场景,没有其他选项是可能的,但如果你不确定参数的数量,我们使用varags。在上面的情况下,我们没有使用varags,因为它们效率较低,占用更多的空间,而且从某种意义上说,它更危险,因为它允许用户传递尽可能多的参数,而上面的例子不是这样的
pgky5nke4#
线索就在你对问题的陈述中。...这取决于作为参数传递的变量的数量和类型。varargs函数具有不确定数量的相同类型的对象,至少就函数的声明而言是这样。重载允许您指定要应用函数的对象的实际类型。在我看来,这一点足以使两者的区别十分清楚。此外,如果您有一个小的固定数量的情况,如果必须在重载和varargs之间进行选择,那么我倾向于重载。它提供了更好的编译时安全性,因为任何给定的调用都可以与可用的函数进行匹配,如果不匹配,则会给出错误。但你一定要超负荷吗?换句话说,所有这些函数具有相同的名称是否有充分的理由。如果他们都做了基本上相同的事情,就用户而言,这是好的。否则,不-想出更好的名字。如果可接受的调用具有一小组您事先知道的可接受的参数计数,则不要使用varargs。最后,当然,它不一定是重载或varargs;它可以是两者。
4条答案
按热度按时间2exbekwf1#
varargs是传递数组的简写。例如,代替写作
字符串
你可以写
型
主要的区别是调用者现在可以写
型
bfhwhh0e2#
例如:
字符串
a5g8bdjr3#
假设你想计算四边形的体积。第一个场景是计算矩形的面积,它需要三个参数。第二种情况是,如果您正在计算只需要一个参数的立方体的面积,第三种情况可能是没有传递任何值。让我们看一个例子:仅用于说明目的
字符串
这是已知的场景,没有其他选项是可能的,但如果你不确定参数的数量,我们使用varags。在上面的情况下,我们没有使用varags,因为它们效率较低,占用更多的空间,而且从某种意义上说,它更危险,因为它允许用户传递尽可能多的参数,而上面的例子不是这样的
pgky5nke4#
线索就在你对问题的陈述中。
...这取决于作为参数传递的变量的数量和类型。
varargs函数具有不确定数量的相同类型的对象,至少就函数的声明而言是这样。
重载允许您指定要应用函数的对象的实际类型。
在我看来,这一点足以使两者的区别十分清楚。
此外,如果您有一个小的固定数量的情况,如果必须在重载和varargs之间进行选择,那么我倾向于重载。它提供了更好的编译时安全性,因为任何给定的调用都可以与可用的函数进行匹配,如果不匹配,则会给出错误。
但你一定要超负荷吗?换句话说,所有这些函数具有相同的名称是否有充分的理由。如果他们都做了基本上相同的事情,就用户而言,这是好的。否则,不-想出更好的名字。
如果可接受的调用具有一小组您事先知道的可接受的参数计数,则不要使用varargs。
最后,当然,它不一定是重载或varargs;它可以是两者。