如何在不使用强制转换的情况下选择要调用的方法的重载版本?

时间:2017-10-27 14:06:22

标签: java methods overloading dispatch

我对Java Overload Methods有疑问。

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

sed

如何实现

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

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

哪一个使用重载的字符串方法,另一个使用重载的对象方法?

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

这样的演员
public static String useString() {
    return(foo("useString"));   
}
public static String useObject() {
    return(foo("useObject"));   
}

也许你可以帮我解决这个问题

编辑:

上面,只是练习的一个例子。我想更好地理解 Overloads Dispatch ,并且正在寻找用于调用(和选择)重载方法的替代解决方案。

3 个答案:

答案 0 :(得分:3)

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

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

虽然最终结果是相同的,但您可以避免使用此方法进行显式强制转换

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

如果要使用接收Object的方法,可以将字符串向上转换为object:

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)将被称为