Как реализовать разные варианты поведения для нескольких наблюдателей? - PullRequest
0 голосов
/ 22 мая 2019

Мне нужно дать другое поведение методу @Override onNext() класса io.reactivex.Observer для 2 типов элементов, которые наблюдатель ожидает наблюдать, будь то классы B и C.

import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public class A implements Observer<B>, Observer<C> {

}

При выполнении методов студии Android он показывает onNext () как: onNext(t:T):void

enter image description here

Но когда методы реализованы, метод равен onNext(B b){}.

И тогда отображается следующая ошибка:

Дубликат класса: 'io.reactivex.Observer'

Кроме того, если я создаю интерфейсы с пользовательскими наблюдателями для неявной реализации поведения, я все равно получаю ту же ошибку, но более наглядную:

public interface InterfaceB extends Observer<B> {}
public interface InterfaceC extends Observer<C> {}
public class A implements InterfaceB, InterfaceC {}

'io.reactivex.Observer' не может наследоваться с аргументами разных типов: 'B' и 'C'.

1 Ответ

2 голосов
/ 22 мая 2019

Как насчет создания интерфейса C, который A и B реализует интерфейс C и создает класс, который является наблюдателем интерфейса C?

public class A implements C {}
public class B implements C {}

public class D implements Observer<C> {

  @Override
  public onNext(C next) {
     if (c instanceof A) {
       // ... do whatever you want to do with A instance
     } else if (c instanceof B) {
       // ... do whatever you want to do with B instance
     }
  }
}
...