方法重载是一种用于完成各种任务的技术,每个任务都取决于作为参数传递的变量的数量和类型。每个重载方法根据传递的参数包含不同的实现。然而,当我们想要传递任意数量的参数时,就需要可变参数了。那么问题来了:当传递未指定数量的参数时,我们如何区分不同的任务?在这样的场景下,我们如何才能有效地处理各种任务呢?
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");
VARARGS。一个典型的例子是 Java 的 Formatter。
一个例子是这样的:
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);
假设您要计算四边形的体积。第一个场景是计算矩形的面积,它需要三个参数。第二种情况是,如果您正在计算仅需要一个参数的立方体面积,则第三种情况可能是不传递任何值。让我们通过一个例子来看一下: 仅用于说明目的
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,因为它们效率较低,消耗更多空间,而且它更危险,因为它允许用户传递尽可能多的参数,但上面的例子不是这种情况
线索就在你对问题的陈述中。
...这是由传递的变量的数量和类型决定的 参数。
可变参数函数具有不确定数量的相同类型的对象,至少就函数的声明而言是这样。
重载允许您指定想要函数应用的对象的实际类型。
在我看来,这已经足够清楚地区分了。
此外,如果你的情况很少且固定,并且必须在重载和可变参数之间进行选择,那么我会倾向于重载。它提供了更好的编译时安全性,因为任何给定的调用都可以与可用函数进行匹配,如果不匹配,则会给出错误。
但是你必须超载吗?换句话说,所有这些函数具有相同的名称是否有充分的理由。如果就用户而言它们都做基本上相同的事情,那就很好。否则,不行——想出更好的名字。
最后,当然,它不必重载 或 可变参数;两者都可以。