如何 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"));
也许你能帮我解决这个问题
编辑:
以上,只是一个练习的例子。我试图更好地理解 Overloads 和 Dispatch 并且正在寻找调用(和选择)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)
将被调用
我对 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"));
也许你能帮我解决这个问题
编辑:
以上,只是一个练习的例子。我试图更好地理解 Overloads 和 Dispatch 并且正在寻找调用(和选择)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)
将被调用