如果Var args方法也存在,并且Java方法中存在重载方法,会发生什么

时间:2017-11-15 09:21:51

标签: java

这是一个完成方法重载的程序。

package com.tests;
public class BasicClass {

    public void getMe(Object a) {
        System.out.println("getMe 1");
    }

    public void getMe(Object a, Object b) {
        System.out.println("getMe 2");
    }

    public void getMe(Object a, Object b, Object c) {
        System.out.println("getMe 3");
    }

    public void getMe(Object a, Object b, Object c, Object d) {
        System.out.println("getMe 4");
    }

    public void getMe(Object... parms) {
        System.out.println("getMe 5");
    }
}

这种多态性对我们有什么好处??

2 个答案:

答案 0 :(得分:3)

这通常用于优化。它允许在不创建数组的情况下执行常见操作(提供最多四个值),同时仍然允许允许任意数量的参数的灵活性。

为了具体,假设我们没有前四个重载。在那种情况下,

instance.getMe("a", "b");

将由编译器转换为:

instance.getMe(new Object[] { "a", "b" });

如果实现不需要数组中的参数,那么避免创建数组是很好的。

答案 1 :(得分:2)

var args的情况下,你得到一个对象 - 这是一个隐含的数组。创建更多此类对象的这些问题仅在您的库真正关心此问题时才有效。例如,像jdk-9这样的Set.of方法重载了多达10个不同参数的方法 - 无需创建一个额外的数组对象。