Java中多方法匹配时如何强制调用非最优匹配方法?
如何强制调用非最优匹配的Java重载方法
在不修改方法签名的前提下,针对你的三个重载方法,可以这样实现非最优匹配的调用:
1. 调用泛型方法 example(T data)(参数为String类型时)
把String参数显式强转为Object,编译器就会匹配泛型方法而非example(String msg):
Example<String> dataExample = (Example<String>) example((Object) "data");
这样比你原来的双重转换更简洁——显式转成Object后,example(String msg)不再是最优匹配,编译器会选择泛型方法,返回的Example<Object>直接强转成Example<String>即可。
2. 调用可变参数方法 example(String... args)(仅传一个String参数时)
除了显式创建数组传入的方式,也可以通过类型转换明确触发可变参数匹配:
Example<?> argsExample = example(new String[]{"args"});
原理是可变参数在编译时等价于数组类型,传入String[]时,编译器会优先匹配example(String... args)而不是单个参数的example(String msg)。
如果需要更灵活的运行时调用,也可以用反射指定方法,但编译期的显式类型转换是更直接高效的方案。
内容的提问来源于stack exchange,提问作者xmcx
相关产品推荐
相关产品推荐

