![](/img/trans.png)
[英]java - use Object as parameter in method signature versus method overloading
[英]Java method overloading parameter management
假设我在类上定义了两个方法,如下所示
public void m(final Serializable s){
System.out.println("method 1");
}
public void m(final String s){
System.out.println("method 2");
}
如果我有一个变量定义为
final Serializable s = "hello world";
如何使用此变量调用m,以便在控制台上打印“方法2”? 我努力了
m(s.getClass().cast(s));
但仍然调用方法1,但是根据我的观察,以上代码确实将s强制转换为String类型。
您的变量s
的类型为Serializable
,但实际上它指向一个String
对象(因为文字"hello world"
为您提供了该类型的对象),因此可以将其强制转换为(String)
。
重载的方法调用在编译时使用最具体的可用类型(在编译时已知)进行解析。 您在此处所做的就是尝试使用运行时已知的最特定类型进行解析。
在Java中,您可以使用Visitor模式来做到这一点(但不幸的是,您不能扩展String
;如果您声明自己的类型,则可以)。
尝试这个:
if (s instanceof String)
m((String)s);
else
m(s);
您可以通过几种方式将其转换为字符串:
m((String) s);
要么:
m(s.toString());
或者,您可以使用s初始化一个String变量,并使用它来调用方法,例如:
String invoker = "" + s;
m(invoker);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.