我对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 ,并且正在寻找用于调用(和选择)重载方法的替代解决方案。
答案 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)
将被称为