这是一个完成方法重载的程序。
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");
}
}
这种多态性对我们有什么好处??
答案 0 :(得分:3)
这通常用于优化。它允许在不创建数组的情况下执行常见操作(提供最多四个值),同时仍然允许允许任意数量的参数的灵活性。
为了具体,假设我们没有前四个重载。在那种情况下,
instance.getMe("a", "b");
将由编译器转换为:
instance.getMe(new Object[] { "a", "b" });
如果实现不需要数组中的参数,那么避免创建数组是很好的。
答案 1 :(得分:2)
在var args
的情况下,你得到一个对象 - 这是一个隐含的数组。创建更多此类对象的这些问题仅在您的库真正关心此问题时才有效。例如,像jdk-9
这样的Set.of
方法重载了多达10个不同参数的方法 - 无需创建一个额外的数组对象。