可变参数与方法重载

问题描述 投票:0回答:4

方法重载是一种用于完成各种任务的技术,每个任务都取决于作为参数传递的变量的数量和类型。每个重载方法根据传递的参数包含不同的实现。然而,当我们想要传递任意数量的参数时,就需要可变参数了。那么问题来了:当传递未指定数量的参数时,我们如何区分不同的任务?在这样的场景下,我们如何才能有效地处理各种任务呢?

java variadic-functions
4个回答
2
投票

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

0
投票
当方法需要不确定数量的参数(对象)时,使用

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

0
投票

假设您要计算四边形的体积。第一个场景是计算矩形的面积,它需要三个参数。第二种情况是,如果您正在计算仅需要一个参数的立方体面积,则第三种情况可能是不传递任何值。让我们通过一个例子来看一下: 仅用于说明目的

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,因为它们效率较低,消耗更多空间,而且它更危险,因为它允许用户传递尽可能多的参数,但上面的例子不是这种情况


0
投票

线索就在你对问题的陈述中。

...这是由传递的变量的数量和类型决定的 参数。

可变参数函数具有不确定数量的相同类型的对象,至少就函数的声明而言是这样。

重载允许您指定想要函数应用的对象的实际类型。

在我看来,这已经足够清楚地区分了。

此外,如果你的情况很少且固定,并且必须在重载和可变参数之间进行选择,那么我会倾向于重载。它提供了更好的编译时安全性,因为任何给定的调用都可以与可用函数进行匹配,如果不匹配,则会给出错误。

但是你必须超载吗?换句话说,所有这些函数具有相同的名称是否有充分的理由。如果就用户而言它们都做基本上相同的事情,那就很好。否则,不行——想出更好的名字。

最后,当然,它不必重载 可变参数;两者都可以。

© www.soinside.com 2019 - 2024. All rights reserved.