当前位置: 首页 > 面试题库 >

使用可变参数重载

邓德惠
2023-03-14
问题内容
class OverloadingVarargs2 {
    static void f(float i, Character... args) {
        System.out.println("first");
        System.out.println(i);
    }
    static void f(Character... args) {
        System.out.println("second");
    }
    static void test() {
        f(1, 'a');
        f('b', 'c'); // the method f is ambiguous
    }
}

代码无法编译,编译器说f含糊。但是我认为第二种方法可以f('b', 'c');解决什么问题?


问题答案:

这是因为无法确定该方法调用是应调用变量args还是应调用float和变量args。

Java决定以这种方式来调用拓宽>装箱>变量args的方法,但是在这种情况下,两者都具有变量args。

在这种情况下,基本上将char扩展为浮动。

Java基元的扩展顺序为:

byte -> short -> int -> long -> float -> double
char -> int -> long -> float -> double


 类似资料:
  • 5.7. 可变参数 参数数量可变的函数称为为可变参数函数。典型的例子就是fmt.Printf和类似函数。Printf首先接收一个的必备参数,之后接收任意个数的后续参数。 在声明可变参数函数时,需要在参数列表的最后一个参数类型之前加上省略符号“...”,这表示该函数会接收任意数量的该类型参数。 gopl.io/ch5/sum func sum(vals...int) int { total

  • 在第二章中,我们已经讲叙了基本的函数定义与调用方法,以及一些函数属性的作用。但 正如大多数编程语言一样,函数是如此普遍且重要的元素。因而本章继续讨论一些有关函 数的较为高级的用法。 5.1 可变参数 可变参数的意义 一般情况下,在定义函数时指定形参,在调用函数时传入实参,且参数个数必须要与定义 时指定的参数数量相等。但在一些情况下,我们将要实现的函数功能,它的参数个数可能 是不确定,或者有些参数是

  • 6. 可变参数 到目前为止我们只见过一个带有可变参数的函数printf: int printf(const char *format, ...); 以后还会见到更多这样的函数。现在我们实现一个简单的myprintf函数: 例 24.9. 用可变参数实现简单的printf函数 #include <stdio.h> #include <stdarg.h> void myprintf(const ch

  • 问题内容: 看到以下代码的输出,我感到很惊讶: 它输出 为什么会这样呢? 我以为该代码不会编译,因为对的调用是 模棱两可的 ,但它运行良好并可以输出。 如果我将代码修改为: 没有错误消息。 为什么第一个代码可以正常运行,但是第二个却给出错误? 问题答案: 此行为是由于与和之间没有这种比较相比,它更具体。 如JLS 第15.12.2.5节(强调我的)中所述: 如果满足以下任一条件,则使用参数表达式e

  • 问题内容: 我正在为我的应用程序创建搜索表单。 用户在其中选择应该用于过滤数据的字段。 数字字段是可变的,所以我不知道SQL查询的where子句中应该有多少个。 如何在where子句中使用可变数量的条件? 谢谢 问题答案: PrepardStatements不支持可变数量的条件。一些框架所做的是将每个PreparedStatement缓存在Map中,键是查询。 因此,每次您要运行查询时,都需要构建

  • 问题内容: 我正在努力查看将值传递给函数时使用哪种方法是否有明显的优势。下面的代码可能不是解释我要做出的决定的最佳示例,但我认为这是最容易理解的示例。 可变参数方法 数组参数法 两种技术中的哪一种是首选?如果是这样,为什么(速度,可靠性或只是易于阅读)?谢谢。 问题答案: 我认为没有速度差异。因为,在功能内部,您可以像一样使用。 我认为如果参数数量较少(例如小于5个),则因为易于阅读,可能是一个更