方法重载-Java

方法重载-Java,java,java-8,Java,Java 8,实际问题:如果它调用1,那么我如何使它调用2 我有以下方法签名 public void myMethod(String myStr, MyClass myClass) {...} // (1) public void myMethod(Object... objects) {...} // (2) 在某个地方我打了个电话 myMethodnew Stringname,new MyClass 将调用哪个重载方法?如果它调用1,那么如何使它调用2?它将调用1,因为方法解析算法优先于不使用vara

实际问题:如果它调用1,那么我如何使它调用2

我有以下方法签名

public void myMethod(String myStr, MyClass myClass) {...} // (1)

public void myMethod(Object... objects) {...} // (2)
在某个地方我打了个电话

myMethodnew Stringname,new MyClass


将调用哪个重载方法?如果它调用1,那么如何使它调用2?

它将调用1,因为方法解析算法优先于不使用varargs的方法

要强制它使用2,可以传递数组或将第一个参数强制转换为对象:


我会简单地说。如果调用构造函数并传递字符串和MyClass对象,它显然会调用重载方法,该方法使用两个参数,一个字符串作为arg 1,一个MyClass对象作为arg 2。

在Java中,它使用最具体的方法。这是根据Java

这份文件说:

如果一个方法调用可以访问并适用于多个成员方法,则有必要选择一个成员方法来为运行时方法分派提供描述符。Java编程语言使用的规则是选择最具体的方法

如果需要调用泛型方法,我认为需要将每个参数转换为泛型类型对象,如下所示:

或者,用作

myMethod(new Object[]{"name", new MyClass()});

为什么不试试看结果呢?我必须写很长的代码来测试。这就是为什么\@朱奈德,嗯。。。它需要3行代码来测试它…所以你希望我们为你这样做,不管怎样,我责备那些回答这个问题的人,如果参数类型与第一个完全匹配,为什么你要调用第二个方法?我在寻找myMethodnew Object[]{name,new MyClass};。谢谢
myMethod((Object) "hello", (Object) new MyClass());
myMethod(new Object[]{"name", new MyClass()});