[英]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.