我需要维护一个像Map<Class<? extends T>, Repository<T>>
这样的Java映射并在不强制转换的情况下检索存储库实例。
我能找到的最接近的实现是Guava的ClassToInstanceMap。但它似乎只支持Map<Class<? extends T>, T>
是否可以使用ClassToInstanceMap表示Map<Class<? extends T>, Repository<T>>
,或者有更好的方法来实现这一点?
这里是显示repositories.get(entityClass).save(entity);
处的转换错误的示例>
// Entity types
interface Entity {
}
class Entity1 implements Entity {
}
class Entity2 implements Entity {
}
// Repositories
interface Repository<T extends Entity> {
default void save(T entity) {};
}
class Entity1Repository implements Repository<Entity1> {
}
class Entity2Repository implements Repository<Entity2> {
}
public class Processor {
private static Map<Class<? extends Entity>, Repository<? extends Entity>> repositories = new HashMap<>();
public static void main(String[] args) {
// Initialize map
repositories.put(Entity1.class, new Entity1Repository());
repositories.put(Entity2.class, new Entity2Repository());
}
public static void save(Class<? extends Entity> entityClass, Entity entity) {
repositories.get(entityClass).save(entity); // Cast error
}
}
我需要维护一个Java Map,例如Map
否,无法使用ClassToInstanceMap
。您的示例代码使用正确的方法。您将不得不使用不安全的地图并进行不安全的投射。