这里有一个依赖服务:
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]
}
在Java测试中,我尝试注入Service1:
@Test
public void testf() {
Service1 s = new Service1();
TupleEx.f().run(s);
}
我遇到了一个异常:
错误:(10,16) java:在cats.data.Kleisli类中,方法run无法应用于给定的类型;需要:无参数;实际得到:com.savdev.Service1;原因:实际和形式参数列表长度不同
虽然在Scala中,我可以像这样运行它:
TupleEx.f().run(s);
Kleisli
覆盖了apply
,只是将其重定向到run
。 - Andrey Tyukin