Статические инициализаторы Java, ссылающиеся на подклассы: избегайте тупиковой загрузки классов - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть класс ItemType с окончательными статическими полями, которые ссылаются на экземпляры подкласса:

public static final ItemType DURATION = new BuiltInAtomicItemType(x);

static class BuiltInAtomicItemType extends ItemType {

    public BuiltInAtomicItemType(X x) {
        this.x = x;
    }

И это приводит к возможности тупиковой загрузки класса, если один поток загружает суперкласс первымв то время как другой класс сначала загружает подкласс.

Теперь проблема в том, что это публичный API, и я не могу его легко изменить.Я хочу исключить возможность тупиковой ситуации при загрузке класса, но не хочу принудительно изменять приложения, которые ссылаются на ItemType.DURATION или другие 40 с лишним аналогичных полей.

Есть ли способ избежатьпотенциальная тупиковая ситуация при сохранении общедоступного API?

...