繁体   English   中英

方法重载 - Java

[英]Method Overloading - Java

实际问题:如果它调用 (1) 那么我怎样才能使它调用 (2) ?

我有以下方法签名

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

public void myMethod(Object... objects) {...} // (2)

我在某个地方打电话

myMethod(new String("name"), new MyClass());

将调用哪个重载方法? 如果它调用(1)那么我怎样才能使它调用(2)

它将调用 (1),因为方法解析算法优先考虑不使用可变参数的方法。

要强制它使用(2),您可以传递一个数组或将第一个参数转换为Object

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

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

这个文档说:

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

如果您需要调用泛型方法,我认为您需要将每个参数转换为泛型类型Object为:

myMethod((Object) "hello", (Object) new MyClass());

或者,用作

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

我会简单地说。 鉴于您正在调用构造函数并传递一个 String 和一个 MyClass 对象,它显然会调用重载方法,该方法接受两个参数,一个 String 作为 arg 1,一个 MyClass 对象作为 arg 2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM