java - 方法调用顺序

标签 java language-design variadic-functions

以下代码在 Java 中编译良好:

public static void main(String[] args) {
    int i =5;
    call(i);
}


static void call(int i){
    System.out.println("int");
}

static void call(long i){
    System.out.println("long");
}

static void call(Integer i){
    System.out.println("Integer");
}


static void call(Object i){
    System.out.println("Object");
}

但是下面的代码给出了编译时错误:

public static void main(String[] args) {
    int i =5;
    call(i);
 }


static void call(int... i){
    System.out.println("int...");
}

static void call(long... i){
    System.out.println("long...");
}

static void call(Integer... i){
    System.out.println("Integer...");
}


static void call(Object... i){
    System.out.println("Object...");
}

为什么 Java 在使用 var-args 时不维护类似的调用机制?同样在第二个示例中,调用应该转到方法 static void call(int... i)

最佳答案

这里是 answer

Java 不能很好地处理重载可变参数方法。

这是规范提供的内容:

那么什么时候应该使用可变参数?作为客户,只要 API 提供它们,您就应该利用它们。核心 API 中的重要用途包括反射、消息格式化和新的 printf 工具。作为 API 设计者,您应该谨慎使用它们,只有当好处真正令人信服时才使用。 一般来说,您不应该重载可变参数方法,否则程序员将很难确定调用了哪个重载。

关于java - 方法调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16292811/

相关文章:

oop - 为什么 Rust 不支持特征对象向上转换?

language-agnostic - 语言内语义差异

scala - 推荐代码风格 : case object Foo or object Foo extends Serializable?

c++ - 默认参数和可变参数函数

java - Spring方面如何在内部工作?

java - 如何减少部分冲洗

java - 在抽象类的具体类中 Autowiring 而不是实现接口(interface)

c - vprintf 使用的参数数量

java - 如果一个java方法接受(Object, Object...),有没有办法向其中提供单个参数?

java - 引用类型和对象类型之间的区别?