Настройка реализации Map с интерфейсом поставщика в качестве его поля (состояния) - PullRequest
0 голосов
/ 19 января 2020

У меня есть фабрика для создания текста и абзацев для документа (отчета). Он имеет реализацию настройки карты с интерфейсом поставщика в качестве своего свойства (поля члена) для ленивого извлечения вспомогательного объекта (например, Customer).

Является ли потокобезопасным использование поставщика в качестве внутреннего состояния карты, возможны ли подводные камни / утечки памяти, когда несколько потоков пытаются вызвать функцию создания?

Кроме того, карта предполагается, что существует только в области запроса.

public class TextFactory <T extends BasicEntity> {
    private static class TextMap<T extends BasicEntity> extends HashMap<String, String> {

            private final Supplier<T> entity;

            public TextMap(Supplier<T> entity) {
                this.entity = entity;
            }

            @Override
            public String get(final Object key) {
                String val = super.get(key);
                if (val == null) {
                    val = CdiUtil.getObject(TextService.class).build(this.entity.get(), key.toString(), null);
                    put((String) key, val);
                }
                return val;
            }

    public static <T> Map<String, String> create(final Supplier<T> entity) {
        return new TextMap<>(entity);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...