Ссылка на подкласс в статической переменнойJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ссылка на подкласс в статической переменной

Сообщение Anonymous »

Инструмент проверки Intellij предупреждает о том, что ссылка на подкласс в статической переменной не является хорошей практикой, поскольку может привести к взаимоблокировке. Используется следующий текст:

Эта проверка сообщает о классах, которые ссылаются на свои собственные подклассы в
их статических инициализаторах или в статических полях. Такие ссылки могут
приводить к взаимоблокировкам на уровне JVM в многопоточной среде, когда один
поток пытается загрузить суперкласс, а другой поток пытается одновременно загрузить
подкласс.

Следующие примеры демонстрируют это:

Код: Выделить всё

class Generator {

public static Generator fiveGenerator = new FixedGenerator(5);

public static Generator sixGenerator = new FixedGenerator(6);

int generateNumber() {
//some generation code
return 1;
}

private static class FixedGenerator
extends Generator {

FixedGenerator(int num) {
this.num = num;
}

@Override
int generateNumber() {
return this.num;
}

private int num;
}
}
Обратите внимание:
  • Код: Выделить всё

    FixedGenerator
    Класс является и должен быть закрытым.
  • Код: Выделить всё

    fiveGenerator
    и SixGenerator являются и должны быть общедоступными.
По этому поводу у меня есть два вопроса:
  • Это плохая практика? Почему? Как это может вызвать тупик?

    Как правильно реализовать это в эквивалентном коде?
    < /li>


Подробнее здесь: https://stackoverflow.com/questions/487 ... c-variable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»