Чтобы сделать понятно, о чем я говорю, вот пример, который идет не так:
Код: Выделить всё
public class T {
// Class that accesses T, which could be defined somewhere outside
// rather than nested here.
static class FortyTwoChecker {
void foo(T t) {
System.out.println("Fourty-two is: "+t.get42());
}
}
// Fields set in constructor.
private final int fortyTwo;
// Callback method that accesses (and might also modify, in some other case)
// fields set in constructor.
int get42() { return fortyTwo; }
T(FortyTwoChecker checker) {
checker.foo(this); // goes wrong!
fortyTwo = 42;
}
}
Я ожидаю, что на этот вопрос может быть сложно ответить, если обратный вызов выполняется из другого потока, но могу ли я хотя бы быть в этом уверен, если все происходит в том же потоке?
( Очевидно, было бы неплохо убедиться, что обратный вызов не будет выполняться до тех пор, пока объект T не будет полностью создан — и не придется беспокоиться — но в случае использования, который заставил меня задуматься об этом, возникают другие проблемы. )
Подробнее здесь: https://stackoverflow.com/questions/786 ... ll-defined
Мобильная версия