下面是一个依赖服务:
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);发布于 2019-03-27 17:26:23
尝试:
TupleEx.f().run().apply(s);run()是val在Kleisli中的"getter“方法。apply()是Scala语法中通常隐藏的东西一般建议:
记住: Scala编译器理解Java。Java对Scala一无所知。在Scala中实现Java接口非常简单。使用Java中的Scala接口是很尴尬的。
https://stackoverflow.com/questions/55382975
复制相似问题