如何 select 在不使用强制转换的情况下调用哪个重载版本的方法?

How to select which overloaded version of a method to call without using a cast?

我对 Java 重载方法有疑问。

假设我有一个重载方法 foo:

public static String foo(String x) {
    return "foo-String: " + x;
}

public static String foo(Object x) {
    return "foo-Object: " + x;
}

如何实现

之类的功能
public static String useString() {
    return(foo("useString"));   
}
public static String useObject() {
    return(foo("useObject"));   
}

其中一个使用重载字符串方法,一个使用重载对象方法?

foo-Method 的调用应该使用字符串输入。 (这意味着我不想使用像

这样的演员表
return(foo((Object)"useObject")); 

也许你能帮我解决这个问题

编辑:

以上,只是一个练习的例子。我试图更好地理解 OverloadsDispatch 并且正在寻找调用(和选择)overload[= 的替代解决方案35=]方法。

我想这有点作弊,但严格来说这并没有在语法级别上使用强制转换:

public static String useObject() {
    return(foo(Object.class.cast("useObject")));   
}

如果我们暂时搁置这背后的动机并尝试回答直接问题,您可以创建对象引用而不是使用显式强制转换。

public static String useObject() {
    Object obj = "useObject";
    return foo(obj);   
}

虽然最终结果是相同的,但您无需使用此方法进行显式 cast

如果你想使用接收对象的方法,你可以将你的字符串向上转换为对象:

public class Main {
    public static String foo(String x) {
        return "foo-String: " + x;
    }

    public static String foo(Object x) {
        return "foo-Object: " + x;
    }

    public static String useString() {
        return(foo("useString"));
    }
    public static String useObject() {
        Object x = "useObject";
        return(foo(x));
    }

    public static void main(String[] args) {
        System.out.println(Main.useObject());
    }
}

方法public static String foo(Object x)将被调用