java Varargs vs方法重载

utugiqy6  于 2023-08-01  发布在  Java
关注(0)|答案(4)|浏览(142)

方法重载是一种用于完成各种任务的技术,每项任务都由作为参数传递的变量的数量和类型决定。每个重载方法都包含基于传递的参数的不同实现。然而,当我们想要传递任意数量的参数时,就需要varargs。问题随之而来:当传递的参数数目不确定时,我们如何区分不同的任务?在这种情况下,我们如何有效地处理各种工作?

2exbekwf

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");

bfhwhh0e

bfhwhh0e2#

  • 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);

字符串

a5g8bdjr

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,因为它们效率较低,占用更多的空间,而且从某种意义上说,它更危险,因为它允许用户传递尽可能多的参数,而上面的例子不是这样的

pgky5nke

pgky5nke4#

线索就在你对问题的陈述中。
...这取决于作为参数传递的变量的数量和类型
varargs函数具有不确定数量的相同类型的对象,至少就函数的声明而言是这样。
重载允许您指定要应用函数的对象的实际类型。
在我看来,这一点足以使两者的区别十分清楚。
此外,如果您有一个小的固定数量的情况,如果必须在重载和varargs之间进行选择,那么我倾向于重载。它提供了更好的编译时安全性,因为任何给定的调用都可以与可用的函数进行匹配,如果不匹配,则会给出错误。
但你一定要超负荷吗?换句话说,所有这些函数具有相同的名称是否有充分的理由。如果他们都做了基本上相同的事情,就用户而言,这是好的。否则,不-想出更好的名字。
如果可接受的调用具有一小组您事先知道的可接受的参数计数,则不要使用varargs。
最后,当然,它不一定是重载varargs;它可以是两者。

相关问题