当给定参数是Collection的子类型时,为什么要调用rightPushAllT ...而不是rightPushAllCollection <T>?

问题描述

在使用 spring data redis listOps 时,我遇到了这种奇怪的行为。有rightPushAll方法被重载,如下所示

Long rightPushAll(K key,V... values);

Long rightPushAll(K key,Collection<V> values);

然后我将该方法称为

List<String> list1 = Arrays.asList("VAL_1","VAL_2");
redisTemplate.opsForList().rightPushAll(key2,list1);

虽然我将参数作为List传递,但实际上是在调用此签名Long rightPushAll(K key,V... values);。我调查了该项目的test suits。我称该方法为测试。

redisTemplate.opsForList().rightPushAll(key2,Arrays.asList("VAL_1","VAL_2"));

这一次它调用了Long rightPushAll(K key,Collection<V> values)。因此,我已经用一个简单的Java程序进行了测试,结果出乎意料地如此!

public static void main(String[] args) throws ParseException {
    List<String> list = Arrays.asList("VAL_1","VAL_2");
    Main test = new Main();
    test.foo("",list);
}
public <T,K> Long foo(String K,T... val) {
    System.out.println("foo T...");
    return 0L;
}
public <T,Collection<T> list) { // ** This Method Is Beign Invoked **
    System.out.println("list");
    return 0L;
}

我正在使用Intellij Idea和Java8。为什么会出现这种行为,或者我在这里想念什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...