如何通过 Scala Reader 从 Java 代码注入依赖项

2024-01-07

这是一个依赖服务:

  public class Service1 {}

通过阅读器使用它的 Scala 代码:

object TupleEx {
  type FailFast[A] = Either[List[String], A]
  type Env[A] = ReaderT[FailFast, Service1, A]

  import cats.syntax.applicative._
  import cats.instances.either._

  def f:Env[Int] = 10.pure[Env]
}

我尝试注入 Service1 的 Java 测试:

  @Test
  public void testf() {
    Service1 s = new Service1();
    TupleEx.f().run(s);
  }

我遇到了一个例外:

错误:(10, 16) java: 方法在类 cats.data.Kleisli 中运行 不能应用于给定类型;必需:未找到参数: com.savdev.Service1 原因​​:实际参数列表和形式参数列表不同 长度

尽管在 Scala 中我可以将其运行为:

TupleEx.f().run(s);

Try:

TupleEx.f().run().apply(s);
  • run()是“getter”方法val inside Kleisli
  • apply()是 Scala 语法糖通常隐藏的内容

一般建议:

  1. 用Java写一个接口
  2. 在 Scala 中实现接口
  3. 在使用 Java 编写代码时,仅使用您通过 Java 接口编写的任何内容。
  4. 使用 Java 编写代码时,不要尝试直接使用 Scala 接口。

请记住:Scala 编译器可以理解 Java。 Java 对 Scala 一无所知。在 Scala 中实现 Java 接口很简单。从 Java 使用 Scala 接口很尴尬。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 Scala Reader 从 Java 代码注入依赖项 的相关文章

随机推荐