如何解决如何明确告诉编译器返回类型是什么?
假设我在一个文件中有一个抽象类和一个同名对象。
如何明确告诉编译器List<Obj> newObjs = objects.stream().peek(x -> {
if (x == null) logger.error("null object");
}).filter(Objects::nonNull).collect(Collectors.toList());
的返回类型是抽象类CommandResult类型而不是对象CommandResult类型?
Base.scala
run
X.scala
trait Base {
def run[T]: Future[T]
}
解决方法
当您编写def run[CommandResult]
时,它表示“运行带有一个名为CommandResult的类型一参数”,这就是为什么您会得到类似以下错误的原因:
On line 3: error: type mismatch;
found : CommandResult.Success.type
required: CommandResult <--- The type parameter,not the class or object.
错误确实是非常令人误解的。例如,尝试override def run[X]: Future[X]
并会看到“必填:X`。
如果您按照Luis的建议进行操作:
trait Base[T] {
def run: Future[T]
}
class X extends Base[CommandResult] {
override def run: Future[CommandResult] = {
Future(CommandResult.Success)
}
}
它将起作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。