У меня есть общий класс, который можно набросать вот так
public class Shared<T extends EntityBase> {
private HashMap<String, Class<? extends Executor<T>>> classes;
private HashMap<String, ? super Executor<T>> instances;
private List<Entity> entities;
private Compiler compiler;
// Constructor and getters
public void put(Entity entity, Source source) {
Class<?> cls = compiler.load(source);
put(entity, (Class<? extends Executor<T>>) cls );
}
private void put(Entity entity, Class<? extends Executor<T>> cls) throws IllegalAccessException, InstantiationException {
classes.put(entity.getId(), cls);
instances.put(entity.getId(), cls.newInstance());
entities.add(entity);
}
}
В моем приложении этот класс создается один раз , и несколько независимых потоков обращаются к нему.
В частности, один поток отвечает за запись в него, а несколько обращаются к его экземплярам Map через геттер.
Когда я получаю экземпляр Source
и вызываю метод private put
, карты и список обновляются.
В сеансе отладки с InteliiJ
при выходе из фрейма класса Singleton
этот класс теряет свое состояние, и Map
и List
снова становятся пустыми.
Как я могу это объяснить? Почему экземпляры Class<? extends Executor<T>>
и ? super Executor<T>
потеряны?