方法重载-Java
实际问题:如果它调用1,那么我如何使它调用2 我有以下方法签名方法重载-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
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()});