public class people {
}
class friend extends people {
}
class coworkers extends people {
}
class family extends people {
}
public void fillMaps(){
ConcurrentMap<String, Collection<family>> familyNames = new ConcurrentHashMap<String, Collection<family>>();
ConcurrentMap<String, Collection<coworkers>> coworkersNames = new ConcurrentHashMap<String, Collection<coworkers>>();
ConcurrentMap<String, Collection<friend>> friendNames = new ConcurrentHashMap<String, Collection<friend>>();
populateMap(family.class, familyNames);
populateMap(coworkers.class, coworkersNames);
populateMap(friend.class, friendNames);
}
private <T> void populateMap(Class<T> clazz, ConcurrentMap<String, Collection<people>> map) {
if (clazz == family.class) {
map.put("example", new ArrayList<family>());
}
if (clazz == coworkers.class) {
map.put("example", new ArrayList<coworkers>());
}
if (clazz == friend.class) {
map.put("example", new ArrayList<friend>());
}
}
家族、同僚、友人のクラスはすべて、ピープルと呼ばれるスーパークラスから拡張されています。以下のメソッドでは、クラスを populateMap メソッドのパラメーターへの引数として使用できないのはなぜですか。また、ここでサブクラス コレクションを引数として渡すことができないのはなぜですか?
error:
The method populateMap(Class<T>, ConcurrentMap<String,Collection<people>>) is not applicable for the arguments (Class<family>, ConcurrentMap<String,Collection<family>>)