在重载方法中传递null作为参数?

mem*_*und 0 java overloading

它为以下类型的问题提供了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
Run Code Online (Sandbox Code Playgroud)

我以为可以通过Optional.empty()这里,但是没有定义的类型,因此不能用来选择正确的方法...

mar*_*ran 7

您需要强制转换null为所需的类型,以便编译器可以解决歧义。

例如:

PersonFactory.get("John", "Doe", (String) null);
Run Code Online (Sandbox Code Playgroud)

要么

PersonFactory.get("John", "Doe", (Integer) null);
Run Code Online (Sandbox Code Playgroud)