Эта проверка сообщает о классах, которые ссылаются на свои собственные подклассы в
их статических инициализаторах или в статических полях. Такие ссылки могут
приводить к взаимоблокировкам на уровне 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 - и SixGenerator являются и должны быть общедоступными.
Код: Выделить всё
fiveGenerator
- Это плохая практика? Почему? Как это может вызвать тупик?
Как правильно реализовать это в эквивалентном коде?
< /li>
Подробнее здесь: https://stackoverflow.com/questions/487 ... c-variable
Мобильная версия