ну покритикуйте меня
Jan. 26th, 2010 05:10 pmВсё ещё пишу на джаве. И вот понадобилось вставить прослойку между андроидным классом и клиентом, чтобы ещё эта прослойка наш интерфейс осуществляла. И я вставил, а андроид будет делегатом, и переопределил все методы, хай идут на делегата.
И вот стартует конструктор. И он первым делом вызывает конструктора суперкласса, т.е. андроидского, а тот начинает вызывать методы.
А методы у нас переопределены, так что всё в порядке, пойдут к делегату за реальным исполнением.
Но штука в том, что делегата-то ещё нету, т.к. наш-то конструктор ещё не работал.
Блин, ну чего там. Поставил в методах проверочку, чтоб проверял - есть делегат, звать делегата, а нет - ставить таск в очередь, и в конструкторе эти таски потом и вызывать.
Теперь упца, очередь-то тоже ещё не инстанциировалась.
Ну чё, можно же и статик написать.
Теперь две альтернативы. Оставить статик очередь по приколу (всё равно ничего не сломает, если делегата ещё нету), или же использовать ThreadLocal.
Знаю, джавщики будут смотреть на меня как на психа. А хаскельщики - с соболезнованием.
Эх...
И вот стартует конструктор. И он первым делом вызывает конструктора суперкласса, т.е. андроидского, а тот начинает вызывать методы.
А методы у нас переопределены, так что всё в порядке, пойдут к делегату за реальным исполнением.
Но штука в том, что делегата-то ещё нету, т.к. наш-то конструктор ещё не работал.
Блин, ну чего там. Поставил в методах проверочку, чтоб проверял - есть делегат, звать делегата, а нет - ставить таск в очередь, и в конструкторе эти таски потом и вызывать.
Теперь упца, очередь-то тоже ещё не инстанциировалась.
Ну чё, можно же и статик написать.
Теперь две альтернативы. Оставить статик очередь по приколу (всё равно ничего не сломает, если делегата ещё нету), или же использовать ThreadLocal.
Знаю, джавщики будут смотреть на меня как на психа. А хаскельщики - с соболезнованием.
Эх...
public void setFlags(final int flags)
{
if (delegate == null) {
queue(new Runnable() {
public void run() {
setFlags(flags);
}
});
} else {
delegate.setFlags(flags);
}
}