Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 错误:方法myMethod(int[])对于类型ArityMethod是不明确的_Java_Ellipsis - Fatal编程技术网

Java 错误:方法myMethod(int[])对于类型ArityMethod是不明确的

Java 错误:方法myMethod(int[])对于类型ArityMethod是不明确的,java,ellipsis,Java,Ellipsis,运行此代码时出错的原因是什么, 运行myMethod() 看起来很明显,不是吗myMethod()可以引用myMethod(int…arg),可以通过传递new int[0]来实现,也可以通过传递new String[0]来引用myMethod(String..arg)变量。两者都是同样有效的,所以java不知道调用哪一个,因此拒绝编译您的代码 您有两个和三个解决方案: 只需使用显式数组调用正确的方法:myMethod(newint[0])调用m1;myMethod(newstring[0])调

运行此代码时出错的原因是什么, 运行
myMethod()


看起来很明显,不是吗
myMethod()
可以引用
myMethod(int…arg)
,可以通过传递
new int[0]
来实现,也可以通过传递
new String[0]
来引用
myMethod(String..arg)
变量。两者都是同样有效的,所以java不知道调用哪一个,因此拒绝编译您的代码

您有两个和三个解决方案:

  • 只需使用显式数组调用正确的方法:
    myMethod(newint[0])
    调用m1;
    myMethod(newstring[0])
    调用m2

  • 修复你糟糕的API设计。一般来说,你不应该允许这样做。重命名一个或两个
    myMethod
    名称以消除歧义,或者,确保这种重叠不会发生,例如通过使用
    void myMethod(int…arg){}
    以及
    void myMethod(String a,String…rest){}
    ,从而确保
    myMethod()
    只能引用
    int…
    变量

  • 创建一个明确的无参数版本:
    void myMethod(){…}
    ,如果您尝试调用
    myMethod()
    ,此版本将优先于其他两个版本

  • 如果您正在编写这样的方法,请使用选项2或选项3。如果这是一个学术练习,或者您被迫处理这样的代码,请告诉作者这是错误的代码,然后使用显式数组


    编辑:根据@Stephen C的评论添加了选项#3。

    在我看来,调用myMethod()可以引用myMethod(int…args)myMethod(String…args)中的任何一个,在这种情况下,两者具有相同的优先级。这就是为什么会出现这个错误

    有关var args和重载的详细说明,请参阅。这将有助于更好地理解var参数


    希望一切都会好起来

    好的。答案已编辑。这是一个相当详细的解释。然而,我认为OP只是在寻找错误的来源,所以前两行应该已经足够好了。干杯
    public class ArityMethod {
        
        public static void myMethod(int... arg){
              System.out.print("\nmyMethod1 : ");
              for (int i : arg) {
               System.out.print(i+", ");
              }
             }
             
             public static void myMethod(String... arg){
              System.out.print("\nmyMethod2 : ");
              for (String str : arg) {
               System.out.print(str +" ");
              }
             }
             
             public static void myMethod1(int a, float b, Object... arg){
              
              System.out.print("\nmyMethod3 a value : "+a);
              System.out.print("\nmyMethod3 b value : "+b);
              
              System.out.print("\nmyMethod3 : ");
              for (Object str : arg) {
               System.out.print(str.toString() +" ");
              }
             } 
             
             public static void main(String[] args) {
              myMethod(1,2,3,4,5);
              myMethod("hello", "welcome", "to", "Java Discover");
              myMethod1(100,3.0f, "hello", "welcome", "to", "Java Discover");
              myMethod(); 
             }
    
    }