为什么返回类型不满足以下方法中的方法签名?
protected Observable<List<? extends Person>> getLoadPersonsObservable() {
return StudentsProvider.getStudentsProvider().getStudents().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
observeOn()方法返回以下内容:
Observable<List<Student>>
这是学生班:
public class Student extends Person {
public Student(String name, String id, boolean approved) {
super(name, id, approved);
}
}
目前,getStudents()是一个存根方法,模拟网络调用:
@Override
public Observable<List<Student>> getStudents() {
final Observable<List<Student>> fetchStudents = Observable.create(new Observable.OnSubscribe<List<Student>>() {
@Override
public void call(Subscriber<? super List<Student>> subscriber) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
List <Student> stubList = new ArrayList<>();
stubList.add(new Student("Freddie Mercury", "1", true));
stubList.add(new Student("Jimmy Hendrix", "2", true));
subscriber.onNext(stubList);
subscriber.onCompleted();
}
});
return fetchStudents;
}
提前致谢! - 伴侣
答案 0 :(得分:0)
结束将Person子类型引用传递给调用者类的父级并更改抽象方法签名,如下所示:
abstract protected Observable<List<P>> getLoadPersonsObservable();
现在该方法的实现可能如下所示:
@Override
protected Observable<List<Student>> getLoadPersonsObservable() {
return StudentsProvider.getStudentsProvider().getStudents().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
瞧,没有错误。谢谢大家的帮助!
答案 1 :(得分:0)
首先为Observer创建一个自定义类
private class MyObservable<T extends Person> extends Observable<List<T>>{
}
然后在您的活动中添加此方法
private MyObservable<Student> getData(){
return new MyObservable<>();
}
这只是你如何实现目标的一个例子。
P.S。这可能不是最终解决方案,但它肯定会帮助您删除解决方案中的静态实现