【问题标题】:Overloaded methods with optional parameters? [closed]带有可选参数的重载方法? [关闭]
【发布时间】:2023-03-28 16:41:02
【问题描述】:

如果我重载一个方法并决定给一个可选参数:

public static void method(int a, double b, String... c){
    //method
}


public static void method(int a, double b, string c, string d){
    //method
}

public static void main(String[] args){
method.(int, double, string, string);
}

省略号表示第一种方法的零个或多个字符串,第二种方法采用两个字符串。如果我调用方法并输入两个字符串,会调用哪个方法?

编辑:我一直在对此进行测试,但是在参数之前但在点之后搜索标识符时,我不断收到编译器错误。作为(非常)Java 新手,什么是标识符,它如何应用于这些方法?

【问题讨论】:

  • 多写两行代码然后自己执行到底有多难。
  • 您知道您可以在 IDE 中编写此代码并测试结果,对吧?
  • 仅仅因为你可以测试这个,我认为它不值得这么多反对。程序员将来可能会发现这很有用,因为用谷歌搜索比测试更快。
  • @bcsb1001 我实际上同意反对票,因为我没有测试然后问为什么它会这样。在没有提供任何先前资源的情况下,我问得太快了。如果人们觉得它有用,他们会投票。
  • 至于您的编译器错误,请从您的方法调用中删除点。

标签: java overloading


【解决方案1】:

更多插图:

另一个答案很好,但我认为它需要更多说明here

JAVA通过以下方式加宽/装箱/可变参数序列搜索来决定从几个重载方法中调用哪个方法:

  • 加宽节拍拳击
  • 扩大节拍 Varargs
  • 拳击击败 Varargs

即:

加宽 > 装箱 > 可变参数

所以带有可变参数的方法作为最后一个选项被调用。

一些解释:

装箱是将原始类型转换为相应的引用类型,即:

int -> Integer
byte -> Byte 

加宽是将变量转换为更广泛的类型,即:

String -> Object
int -> long

所以JAVA使用this通过重载方法来扩大其匹配过程的范围。

【讨论】:

    【解决方案2】:

    只有在别无选择的情况下,Java 才会调用带有可变参数的方法。所以当你传递2个Strings时会调用不带可变参数的方法。

    【讨论】:

    • 什么是省略号方法?
    • @ortis。你已经给出了答案。你没有给 Ely 一个调查某事并享受结果的机会。 ;)
    • @Luiggi Mendoza:最后一个参数可以出现零次或多次的方法。
    • @Conffusion:是的。虽然,自己尝试不会给你Java在最后手段调用省略号的信息
    • +1。正确这对我来说也是新的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多