为什么 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。这可能不是最终的解决方案,但它肯定会帮助您删除解决方案中的静态实现
为什么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。这可能不是最终的解决方案,但它肯定会帮助您删除解决方案中的静态实现