为什么Java泛型类型在List <generic <>>中的行为不同于Generic <>

时间:2018-10-11 16:33:38

标签: java generics

我写了简单的通用代码,遇到了奇怪的行为。我有这样的地图:

Map<FamilyMember<? extends Person>, List<Socks<? extends Person>>> socksInTheBox;

家庭成员是一个通用摘要,如下所示:

public abstract class FamilyMember<T extends Person> {

    abstract void putSocksInTheBox(List<Socks<T>> socks);

    abstract List<Socks<T>> takeSocksFromTheBox();

}

人只是没有方法的界面:

interface Person {  
}

袜子是通用类:

public class Socks <Owner extends Person>   {
    Owner owner;
    public Socks(Owner owner) {

        this.owner = owner;

    }
}

我想编写一种将<K, V>添加到socksInTheBox的方法:

public <T extends Person> void putSocks(FamilyMember<T> member, List<Socks<T>> socks) {
    socksInTheBox.put(member, socks);
}

但这给了我socksInTheBox.put(member, socks); is not applicable for the arguments (FamilyMember<T>, List<Socks<T>>)

的编译错误

当我将List<Socks<T>>更改为List<Socks<? extends Person>>时,它开始工作。谁能解释我为什么会这样?

0 个答案:

没有答案