У меня есть класс 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?