gpt4 book ai didi

scala - 如何从 Java 代码通过 Scala Reader 注入(inject)依赖项

转载 作者:行者123 更新时间:2023-12-01 12:07:14 27 4
gpt4 key购买 nike

这是一个依赖服务:

  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]
}

我尝试注入(inject) Service1 的 Java 测试:

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

我遇到异常:

Error:(10, 16) java: method run in class cats.data.Kleisli cannot be applied to given types; required: no arguments found: com.savdev.Service1 reason: actual and formal argument lists differ in length

尽管在 Scala 中我可以这样运行它:

TupleEx.f().run(s);

最佳答案

尝试:

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

一般建议:

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

记住:Scala 编译器理解 Java。 Java 对 Scala 一无所知。在 Scala 中实现 Java 接口(interface)是微不足道的。从 Java 使用 Scala 接口(interface)很尴尬。

关于scala - 如何从 Java 代码通过 Scala Reader 注入(inject)依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55382975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com