2 回答
TA贡献1812条经验 获得超5个赞
您需要转换null为您想要的类型,以便编译器可以解决歧义。
例如:
PersonFactory.get("John", "Doe", (String) null);或者
PersonFactory.get("John", "Doe", (Integer) null);TA贡献1853条经验 获得超6个赞
如果您传递 literal ,这只是一个问题null。
考虑添加另一个仅包含 2 个参数的重载,以避免出现 a) 的调用站点问题null;b) marstran建议的消除歧义的空投:
public static Person create(String firstname, String lastname) {
return create(firstname, lastname, (Integer) null);
// Or (String), if that's the one you want to invoke.
}
null本身(或强制转换)对代码的读者来说意义不大。
现有重载的另一种方法是定义一个常量:
public static final Integer MISSING_AGE = null;
// ...
Person.create(firstname, lastname, MISSING_AGE)
您可以为此常量选择一个名称,它可以准确传达空参数值的语义:
隐瞒年龄
未知年龄
零年龄
默认年龄
现在创建没有年龄,但稍后会提供
...
(类似地,应该命名上面建议的 2-argcreate方法以传达不提供年龄的含义)。
尽管如此,如果没有 String 重载,就不会出现此问题。为方便起见,我假设您有 String 重载:您不需要对 API 的调用者如此“友善”。
就目前而言,不清楚您会接受什么 String 值:您接受空格吗?千位逗号分隔?十六进制?ETC。
让调用者处理这些问题:如果您只接受一个Integer,那么他们就是必须弄清楚如何构造它的人。
这对他们来说可能更容易,因为他们比你更了解他们的数据,而且他们发现你的 API 更容易理解。这对您来说更容易,因为您需要维护的 API 面更小。
添加回答
举报
