为什么 return 类型不满足方法签名?

Why doesn't the return type satisfy the method signature?

为什么return类型不满足下面方法中的方法签名?

protected Observable<List<? extends Person>> getLoadPersonsObservable() {
    return StudentsProvider.getStudentsProvider().getStudents().subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread());
}

observeOn() 方法return如下:

Observable<List<Student>>

这是学生 class:

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;
}

提前致谢! - 伴侣

最终将 Person 子类型引用传递给调用者的父级 class 并更改抽象方法签名如下:

 abstract protected Observable<List<P>> getLoadPersonsObservable();

现在该方法的实现如下所示:

@Override
protected Observable<List<Student>> getLoadPersonsObservable() {
    return StudentsProvider.getStudentsProvider().getStudents().subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread());
}

瞧,没有错误。谢谢大家的帮助!

首先为您的观察者创建自定义 class

private class MyObservable<T extends Person> extends Observable<List<T>>{

}

然后在您的 activity 中添加此方法

private MyObservable<Student> getData(){
        return new MyObservable<>();
}

这只是您如何实现目标的示例。

P.S。这可能不是最终的解决方案,但它肯定会帮助您删除解决方案中的静态实现