Java 方法重载参数管理



假设我在类中定义了两个方法,如下所示

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 转换为字符串类型。

你的变量sSerializable的类型,但实际上它指向一个String对象(因为文字"hello world"给你一个该类型的对象(,所以它可以被强制转换为(String)

重载的方法调用在编译时使用可用的最具体类型(在编译时已知(解析;您在这里所做的是尝试使用运行时已知的最具体的类型进行解析。

在Java中,你可以使用Visiter模式来做到这一点(但不幸的是你不能扩展String;如果你声明自己的类型,你可以(。

试试这个:

if (s instanceof String)
m((String)s);
else
m(s);

您可以通过多种方式将其转换为字符串,例如:

m((String) s);

或:

m(s.toString());

或者你可以用 s 初始化一个 String 变量,并用它调用该方法,如下所示:

String invoker = "" + s;
m(invoker);

相关内容

  • 没有找到相关文章

最新更新