У меня есть класс, экземпляры которого создаются Java (через GetInstance
).
Класс подписывается на наблюдаемое в его конструкторе.
У меня нет контроля над временем жизнииз этих экземпляров, и у меня также нет возможности узнать, когда экземпляр больше не нужен, поэтому я не могу просто отписаться.
Из-за подписки на наблюдаемое мои экземпляры никогда не собираются мусором.
Поэтому я хотел бы подписаться на наблюдаемые таким образом, чтобы не мешать сбору мусора.Возможно ли это?
Вот что я пробовал, но я не уверен, как проверить, что он действительно делает то, что должен:
class WeakConsumer implements Consumer<ObsType> {
private final WeakReference<MyType> ref;
public WeakConsumer(WeakReference<MyType> ref) { this.ref = ref; }
@Override
public void accept(ObsType value) throws Exception {
MyType instance = ref.get();
if(instance != null) {
// Do something
}
}
}
И в классе MyType
:
obs.subscribe(new WeakConsumer(new WeakReference<>(this)));
Будет ли это работать как ожидалось?