将具有动态确定的类型参数的对象传递给2参数方法,该方法的两个参数都具有相同的类型参数

时间:2018-07-17 15:01:31

标签: java wildcard

说我有一个utils函数:

public static <T extends Number> double myFunc(List<T> a1, List<T> a2) {...}

接下来,我有一堂课:

class Config<T extends Number>{
    public List<T> buckets;
    public List<T> groups;
}

最后, 我想写一个函数,像这样:

double execute(Config<? extends Number> config){
    //Some stuff
    myFunc(config.buckets, config.groups)
}

但是,这给了我一个编译时错误:“方法myFunc(List ,List )不适用于参数(List ,List )“。

我对为什么编译器不喜欢这样的原因有一个猜测。基本上,myFunc要求两个参数列表都具有相同的类型参数T extends Number,但是我提供了{{1 }},因此无法确保两者都是相同的类型参数吗? (我遇到了此错误,所以我猜这也是造成该问题的原因。)但是我使用的是相同的? extends Number对象的Config<? extends Number> configbuckets字段,如果您请参阅类定义,具有与类级别type参数中定义的类型groups相同的类型。那不是保证它们具有相同的类型参数吗?

问题还在其他地方吗?

预先感谢您一直努力到最后。

0 个答案:

没有答案