У меня есть внутренний класс, который реализует Iterable с помощью метода, подобного следующему:
public Iterator iterator() {
return new Iterator() {
Foo foo = fooThreadLocal.get();
int bar = foo._bar;
void baz() {
System.out.println("" + bar);
System.out.println("" + foo);
}
public Object next() {
baz();
...
}
}
}
Странно (для меня), в некоторых случаях значение foo внутри baz равно нулю, но значение bar равно 0 (исключение нулевого указателя при инициализации поля). Кроме того, странно, что поле имеет нулевое значение в первую очередь, поскольку, если я печатаю трассировку стека, происходит вызов метода set ThreadLocal, который устанавливает его значение для вновь созданного объекта Foo, но это может быть другой проблемой. .
Кто-нибудь знает, что здесь может происходить?