Вот я, думая, что знаю Java, и получаю ошибку Variable 'storage' might not have been initialized
. Вот мой код:Возможно, переменная не была инициализирована
public class RobbleSet {
private final Set<Robble> storage; // Error occurs here
public RobbleSet() {
storage = new HashSet<Robble>();
}
public addRobble(Robble r) {
storage.add(r); // Error occurs here too
}
}
storage
инициализируется в конструкторе. Что дает?
Возможно, вы захотите проверить, что это конструктор * only *. Если у вас несколько конструкторов, каждый из них должен будет инициализировать 'storage'. Еще лучше, просто напишите 'private final Set storage = new HashSet ();' для начала, и вам не нужно будет помещать его в конструктор. :-) –
ruakh
У меня определенно есть только один конструктор. Существуют ли какие-либо технические различия (на уровне байт-кода/выполнения) инициализации в поле, а не в конструкторе? –
Я только что написал ответ - и вижу, что вы отредактировали свой вопрос, чтобы сказать то же самое. Что касается технических различий между инициализацией в одном месте по сравнению с другим: не совсем. Из того, что я понимаю, разница будет передаваться из исходного кода в байт-код (поскольку одна версия идет в методе 'init', а не в конструкторе), но это не должно иметь никакого * реального * эффекта. – ruakh