в общем, использую в некоторых поделках механизм уведомления по подписке
final private LinkedList<WeakReference<IDataReadyNotify>> listeners = new LinkedList<>();
...
@Override
public IDataChunk subscribe(IDataReadyNotify listener) {
listeners.add(new WeakReference<>(listener));
return this;
}
protected synchronized void notifyDataReady(IDataChunk chunk) {
for (WeakReference<IDataReadyNotify> listener: listeners) {
IDataReadyNotify item = listener.get();
if (item != null) item.onDataReady(chunk);
}
}
соответственно, для
private final IDataChunk.IDataReadyNotify onReadyNotifier = XXDataCollector.this::notifyDataReady;
линтер советует заменить локальной переменной, что очевидно не подходит поскольку нарушает время жизни объекта.
Не могу найти подходящую аннотацию, чтобы задавить.
Здравствуйте, GarryIV, Вы писали:
pva>>линтер советует заменить локальной переменной GIV>у линтеров обычно есть способ задавить конкретное срабатывание правила. имя линтера и его ругательство в студию. обычно легко гуглится если не экзотика. GIV>вот например про чекстайл https://stackoverflow.com/questions/4023185/disable-a-particular-checkstyle-rule-for-a-particular-line-of-code
Стандартный линтер из АндроидСтудио. Что-то я про гугление не подумал. Решением оказалось @SuppressWarnings("FieldCanBeLocal")
Здравствуйте, pva, Вы писали:
pva>listeners.add(new WeakReference<>(listener));
Я надеюсь, это неполный код. Иначе у тебя тут утечка ресурсов — в список что-то добавляется, но никогда не удаляется.
pva>Стандартный линтер из АндроидСтудио. Что-то я про гугление не подумал. Решением оказалось @SuppressWarnings("FieldCanBeLocal")
Эээ.. Так ведь там есть intention чтобы suppress warning. Оно само поставит нужную аннотацию в нужное место. https://www.jetbrains.com/help/idea/disabling-and-enabling-inspections.html#suppress-in-editor
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ·, Вы писали:
pva>>listeners.add(new WeakReference<>(listener)); ·>Я надеюсь, это неполный код. Иначе у тебя тут утечка ресурсов — в список что-то добавляется, но никогда не удаляется.
Безусловно, он был бы неполный без unsubscribe и/или периодической чистки от сдохших элементов. Но в данном конкретном случае use-case не предполагает такового. Это синглтон-контейнер, который аггрегирует сигналы своих элементов в одной точке. Подписка идет только при запуске приложения и отписка исключительно при завершении работы.
Насколько я помню деструкторов в джаве нет, а в ондроидах у тебя ОС может вообще без причин грохнуть для экономии электричества и Application не распознает.
pva>>Стандартный линтер из АндроидСтудио. Что-то я про гугление не подумал. Решением оказалось @SuppressWarnings("FieldCanBeLocal") ·>Эээ.. Так ведь там есть intention чтобы suppress warning. Оно само поставит нужную аннотацию в нужное место. ·>https://www.jetbrains.com/help/idea/disabling-and-enabling-inspections.html#suppress-in-editor
Не, в данном случае это не работает. Нет такого элемента в меню.
Здравствуйте, pva, Вы писали:
pva>·>Я надеюсь, это неполный код. Иначе у тебя тут утечка ресурсов — в список что-то добавляется, но никогда не удаляется. pva>Безусловно, он был бы неполный без unsubscribe и/или периодической чистки от сдохших элементов. Но в данном конкретном случае use-case не предполагает такового. Это синглтон-контейнер, который аггрегирует сигналы своих элементов в одной точке. Подписка идет только при запуске приложения и отписка исключительно при завершении работы. pva>Насколько я помню деструкторов в джаве нет, а в ондроидах у тебя ОС может вообще без причин грохнуть для экономии электричества и Application не распознает.
Я бы лучше явную отписку писал, можно в try-with-resources и AutoCloseable оборачивать. Всё лучше, чем магические исчезающие ссылки, зависящие от стиля кода.
pva>>>Стандартный линтер из АндроидСтудио. Что-то я про гугление не подумал. Решением оказалось @SuppressWarnings("FieldCanBeLocal") pva>·>Эээ.. Так ведь там есть intention чтобы suppress warning. Оно само поставит нужную аннотацию в нужное место. pva>·>https://www.jetbrains.com/help/idea/disabling-and-enabling-inspections.html#suppress-in-editor pva>Не, в данном случае это не работает. Нет такого элемента в меню. Стрелочка такая ">" справа от пункта меню. Это там подменю, а не просто закорючка для красоты.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ·, Вы писали:
pva>>Не, в данном случае это не работает. Нет такого элемента в меню. ·> Стрелочка такая ">" справа от пункта меню. Это там подменю, а не просто закорючка для красоты.
Ну вот я тоже помню что было такое подменю. Ха, надо тыкать именно на стрелочку или использовать кнопку клавиатуры -> чтобы открылось меню. Если тыкать мышей именно на верхний пункт, то он просто исполняется.