繁体   English   中英

Java方法重载参数管理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM