当前位置: 首页 > 编程笔记 >

Java Varargs中的方法重载和歧义

卢锋
2023-03-14
本文向大家介绍Java Varargs中的方法重载和歧义,包括了Java Varargs中的方法重载和歧义的使用技巧和注意事项,需要的朋友参考一下

在Java中使用变量参数时存在歧义。发生这种情况是因为两种方法绝对可以有效地被数据值调用。因此,编译器不知道该调用哪种方法。

示例

public class Demo {
   static void my_fun(double ... my_Val){
      System.out.print("fun(double ...): " + "Number of args: " + my_Val.length );
      for(double x : my_Val)
      System.out.print(x + " ");
      System.out.println();
   }
   static void my_fun(boolean ... my_Val){
      System.out.print("fun(boolean ...) " + "The number of arguments: " + my_Val.length);
      for(boolean x : my_Val)
      System.out.print(x + " ");
      System.out.println();
   }
   public static void main(String args[]){
      my_fun(11.56, 34.78, 99.09, 56.66);
      System.out.println("Function 1 has been successfully called");
      my_fun(true, false, true, false);
      System.out.println("Function 2 has been successfully called");
      my_fun();
      System.out.println("Function 3 has been successfully called");
   }
}

输出结果

Demo.java:23: error: reference to my_fun is ambiguous
my_fun();
^
both method my_fun(double...) in Demo and method my_fun(boolean...) in Demo match
1 error

名为Demo的类定义了一个名为“ my_fun”的函数,该函数采用可变数量的浮点值。使用“ for”循环将这些值打印在控制台上。此函数已重载,并且参数是数量变化的布尔值。输出通过“ for”循环显示在控制台上。

在主函数中,首先使用浮点ppoint值调用“ my_fun”,然后使用布尔值调用,然后再不使用任何参数。导致的异常显示在控制台上。

 类似资料:
  • 问题内容: 在这里,输出是 字符串空 JVM为什么使用String参数将方法解析为一种? 在此先感谢J 问题答案: 这是一个相当复杂的算法,在JLS 15.12中进行了 详细介绍。但是这里相关的部分是15.12.2,它说“选择了最具体的部分”。对象和字符串重载都是“可访问且适用的”(字符串适用,因为空文字是所有类型的引用),并且字符串更具体。 编辑:根据语法更正的部分。

  • 问题内容: 以下是Java 7中的代码编译,但不是openjdk-1.8.0.45-31.b13.fc21。 编译器声称最后一个方法调用不明确。 如果我们将第二个参数的类型从from 更改为,则代码将在两个平台上编译。为什么发布的代码无法在Java 8中编译? 问题答案: 首先,让我们考虑一个没有三进制条件并且不能在Java HotSpot VM(版本1.8.0_25-b17)上编译的简化版本:

  • 问题内容: 让我们看一下这个简单的Java代码: 我试图找出三个eat()方法的哪个版本。现在,当我键入 输出是“一般动物食用”,这是完全可以理解的。 当我键入以下内容时,会发生相同的事情: 输出是“吃干草的马”,这完全是合乎逻辑的。 这就是让我感到困惑的地方。当我键入: 我得到: 我希望编译器从Animal类引用而不是Horse对象引用中调用eat()方法。 所以我的问题是,当我有一个引用对象类

  • 有人能告诉我这些方法模棱两可的原因吗?提前谢谢你。

  • 让我们用这个简单的Java代码: 我试图找出这三个ate()方法的哪个版本将运行。现在,当我键入 结果是“普通动物一般地吃”,这是完全可以理解的。 当我输入时也会发生同样的事情: 结果是“吃干草的马”,这也是完全合乎逻辑的。 这就是我困惑的地方。当我输入: 我得到: 我期望编译器从动物类引用调用ate()方法,而不是马对象引用。 所以我的问题是,当我有一个泛型引用变量类型引用一个对象类型时(比如:

  • 问题内容: 今天就去旅行。我注意到我可以将结构文字传递给与指向结构的指针关联的方法,反之亦然。为什么允许这样做? 输出: 问题答案: 请参阅方法集: 一个类型可能具有与之关联的方法集(§接口类型,§Method声明)。接口类型的方法集是其接口。其他任何类型T的方法集都包含接收者类型T的所有方法。相应指针类型 T的方法集是接收者 T或T的所有方法的集合(也就是说,它还包含T)。进一步的规则适用于包含