【问题标题】:How to implement a Scala Trait in Java code如何在 Java 代码中实现 Scala Trait
【发布时间】:2020-02-04 07:58:38
【问题描述】:

在 scala 中,有一个类似

的特征
trait Client {
  def get(requests: Seq[Request]): Future[Seq[Response]]
}

如何在 Java 中使用 return Future.successful(List.empty()) 之类的假实现来实现该类?

我试过了

class KVClient implements Client {
    @Override
    public Future<Seq<Response>> get(Seq<Request> requests) {
      return Future.successful(List.empty());
    }

但它没有编译。错误是“KVClient 不是抽象的,并且不会覆盖 Client 中的抽象方法 get(Seq)”

【问题讨论】:

  • 你能准确地发布你得到的编译器错误是什么吗?除此之外,您可以发布您正在使用的类的导入吗?
  • 你可以使用`Future future = CompletableFuture.completedFuture(value); ` 返回一个成功的未来。请同时发布错误
  • 特征是trait Client def get(requests: Seq[Request]): Future[Seq[Response]] } 我有实现客户端的KVClient。 ``` @Override public Future> get(Seq requests) { return Future.successful(List.empty()); } ``` 错误是“KVClient 不是抽象的,并且没有覆盖 Client 中的抽象方法 get(Seq)”

标签: java scala


【解决方案1】:

如果我对您的理解正确,您将尝试返回响应未来的结果或错误。

简单的解决方案是:

public CompletableFuture<Optional<?>> send() throws ExecutionException, InterruptedException {
      final CompletableFuture<Optional<?>> optionalCompletableFuture = CompletableFuture.supplyAsync(() -> "")
        .thenApplyAsync(f -> {
          if (isError(f)) {
            return Optional.empty();
          }
          return Optional.of(f);
        });
      return optionalCompletableFuture;

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多