Трябва да поддържам java карта като Map<Class<? extends T>, Repository<T>>
и да извлека екземпляра на хранилището без кастинг.
Най-близката реализация, която можах да намеря, е ClassToInstanceMap на Guava. Но изглежда поддържа само 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
}
}