不兼容类型,已找到列表<;捕获<;?扩展模型>&燃气轮机;仅在Java8中
我目前正在审查对Android应用程序的更改,该应用程序升级为使用Java8 在检查过程中,我注意到以下代码被划为错误:不兼容类型,已找到列表<;捕获<;?扩展模型>&燃气轮机;仅在Java8中,java,android,android-studio,java-8,rx-java2,Java,Android,Android Studio,Java 8,Rx Java2,我目前正在审查对Android应用程序的更改,该应用程序升级为使用Java8 在检查过程中,我注意到以下代码被划为错误: List<MappableTask> tasks = Observable.fromIterable(taskMapHoldingPresenter.getMappableTasks()) .filter(isMappableTask) .toList() .blockingGet(); 请注意,MappableT
List<MappableTask> tasks = Observable.fromIterable(taskMapHoldingPresenter.getMappableTasks())
.filter(isMappableTask)
.toList()
.blockingGet();
请注意,MappableTask
是由各种模型类实现的接口
怎么会是List List=taskMapHoldingPresenter.getMappableTasks()代码>无效吗
此代码按预期生成。如上所述,在升级应用程序以使用Java8之前,没有显示此错误。为什么会出现此问题?您的接口声明允许getmappabletask
方法返回任何MappableTask
子类的列表。假设MappableAsyncTask
扩展MappableTask
您的接口理论上可以返回列表
这种限制的存在是有原因的。如果可以进行此分配,您可以轻松地将MappableTask
实例添加到任务
列表中,从而打破实际的列表实现契约。请记住,getMappableTasks
方法返回的实际列表只能包含mappableask
的实例
List<MappableTask> tasks = asyncPresenter.getMappableTasks(); // wrong
tasks.add(new MappableTask()); // wrong
List tasks=asyncPresenter.getMappableTasks();//错误的
tasks.add(新的MappableTask());//错误的
更多信息。您的接口声明允许getMapableTasks
方法返回任何MapableTask
子类的列表。假设MappableAsyncTask
扩展MappableTask
您的接口理论上可以返回列表
这种限制的存在是有原因的。如果可以进行此分配,您可以轻松地将MappableTask
实例添加到任务
列表中,从而打破实际的列表实现契约。请记住,getMappableTasks
方法返回的实际列表只能包含mappableask
的实例
List<MappableTask> tasks = asyncPresenter.getMappableTasks(); // wrong
tasks.add(new MappableTask()); // wrong
List tasks=asyncPresenter.getMappableTasks();//错误的
tasks.add(新的MappableTask());//错误的
更多信息。您可以使用
List<MappableTask> tasks
= Observable.<MappableTask>fromIterable(taskMapHoldingPresenter.getMappableTasks())
.filter(isMappableTask)
.toList()
.blockingGet();
列出任务
=可观察的.fromIterable(taskMapHoldingPresenter.getMappableTasks())
.filter(IsAppableTask)
托利斯先生()
.blockingGet();
正如正确解释的那样,您不能简单地分配一个可以使用的列表
List<MappableTask> tasks
= Observable.<MappableTask>fromIterable(taskMapHoldingPresenter.getMappableTasks())
.filter(isMappableTask)
.toList()
.blockingGet();
列出任务
=可观察的.fromIterable(taskMapHoldingPresenter.getMappableTasks())
.filter(IsAppableTask)
托利斯先生()
.blockingGet();
正如正确解释的那样,您不能简单地分配一个ListShort答案:假设B扩展了a,列表不是ListShort答案的子类型:假设B扩展了a,列表不是ListShort答案的子类型您可以通过使用ListTasks=Collections.unmodifiableList(asyncPresenter.GetMapableTasks())防止错误的插入代码>,这也允许类型转换。您可以通过使用List tasks=Collections.unmodifiableList(asyncPresenter.getMappableTasks())防止错误插入代码>,然后还允许类型转换。
List<MappableTask> tasks = asyncPresenter.getMappableTasks(); // wrong
tasks.add(new MappableTask()); // wrong
List<MappableTask> tasks
= Observable.<MappableTask>fromIterable(taskMapHoldingPresenter.getMappableTasks())
.filter(isMappableTask)
.toList()
.blockingGet();
List<MappableTask> list = taskMapHoldingPresenter.getMappableTasks();
List<MappableTask> list // just a lightweight wrapper
= Collections.unmodifiableList(taskMapHoldingPresenter.getMappableTasks());
List<MappableTask> list = new ArrayList<>(taskMapHoldingPresenter.getMappableTasks());