【发布时间】:2019-07-04 13:36:11
【问题描述】:
Java 中有针对以下类型问题的解决方案:具有一个参数不同的重载方法。不同的参数传入null怎么办?
class PersonFactory {
public static Person create(String firstname, String lastname, String age) {
return create(firstname, lastname, Integer.valueOf(age));
}
public static Person create(String firstname, String lastname, Integer age) {
Person p = new Person();
p.setFirstname(firstname);
p.setLastname(lastname);
p.setAge(age);
return p;
}
}
PersonFactory.get("John", "Doe", null); //ambigous mapping
我认为可以在这里传递一个Optional.empty(),但它没有定义类型,因此不能用于选择正确的方法...
【问题讨论】:
-
你希望它调用哪个重载?
-
我希望它调用带有
Integer的方法。 -
如果没有 String 重载,就不会出现这个问题。不要对 API 的调用者这么“友善”:如果你需要传入一个 Integer,让他们弄清楚如何将他们的字符串转换为 Integer。就目前而言,尚不清楚您将接受哪些 String 值:您接受空格吗?千位逗号分隔?十六进制?等等。让来电者处理这些问题。
-
@AndyTurner 感谢您的建议。虽然我现在知道如何解决过载问题,但您让我相信这种方法弊大于利。所以我放弃了纯字符串方法。
标签: java overloading