我知道如果有多个方法匹配,java会调用最佳匹配方法。参考下面的代码,是否可以在不修改方法签名的情况下强制调用非最佳匹配的方法?
public static class Example<T> {
public static <T> Example<T> example(T data) {
return null;
}
public static <T> Example<T> example(String msg) {
return null;
}
public static <T> Example<T> example(String... args) {
return null;
}
public static void example() {
Example<?> msgExample = example("msg");
// how to call `result(T data)` instead `result(String msg)` ?
Example<String> dataExample = example("data");
// working but required double casting
Example<String> dataExampleByCasting = (Example<String>) ((Example<?>) example((Object) "data"));
// how to call `result(String... args)` instead `result(String msg)` ?
Example<?> argsExample = example("args");
// working but required new array
Example<?> argsExampleByNewArray = example(new String[]{"args"});
}
}
你不能调用“最差匹配”方法。
实现所需结果的唯一方法是您在代码末尾已经描述的方法,所以是的,您需要为方法调用创建一个新数组。
概括一下解决方案:您需要调整调用方法时提供的参数类型。这可能需要创建一个新数组,有时将您的对象转换为另一个数组就足够了。