public abstract class Mother {
}
public class Daughter extends Mother {
}
public class Son extends Mother {
}
我需要Map
哪些键是Daughter
或Son
类之一,哪些值是这两个类别之一的对象列表,分别
例如:
/* 1. */ map.put(Daughter.class, new ArrayList<Daughter>()); // should compile
/* 2. */ map.put(Son.class, new ArrayList<Son>()); // should compile
/* 3. */ map.put(Daughter.class, new ArrayList<Son>()); // should not compile
/* 4. */ map.put(Son.class, new ArrayList<Daughter>()); // should not compile
我试过了Map<Class<T extends Mother>, List<T>>
,但它没有编译。
Map<Class<? extends Mother>, List<? extends Mother>>
会进行编译,但案例3.
和4.
也会编译,而不应该编译。
甚至可能吗?
答案 0 :(得分:8)
我不认为可以在类型中对此进行编码,我会使用自定义类进行编码
class ClassMap<T> {
private Map<Class<? extends T>, List<? extends T>> backingMap = new HashMap<>();
public <E extends T> void put(Class<E> cls, List<E> value) {
backingMap.put(cls, value);
}
@SuppressWarnings("unchecked")
public <E extends T> List<E> get(Class<E> cls) {
return (List<E>)backingMap.get(cls);
}
}
只要不泄漏此类之外的backingMap
引用,就可以在此处禁止显示警告。
答案 1 :(得分:0)
假设您正在寻找单个地图,那么这是不可能的。