scala 如何隐式使抽象方法成为有效参数以便我可以在 java 中使用方法

How scala implicit make abstract method valid parameter so I can use method in java

所以这是一个有点奇怪的问题,但我正在尝试使用 scala 中的一段代码并采用一组参数。在 Scala 中,参数是隐含的,因此 Scala 能够发挥其魔力来填充这些对象所需的内容。但是由于我无法在 java 中使抽象对象成为 "implicit",因此我需要弄清楚如何创建该对象,但我一辈子都做不到。

这是 Scala 代码:

class AsyncSchemaRegistryClient (
  val baseUri: String
) (
  implicit as: ActorSystem,
  m: Materializer,
  ec: ExecutionContext
) extends SchemaRegistryClient[Future] with Json4sSupport {...

所以这是由原始代码中的另一种方法调用的(在 Guice Inject 和子模块的漫长曲折路径中很难按原样进行),我试图在 java 代码如下:

private AsyncSchemaRegistryClient asyncSchemaRegistryClient = new AsyncSchemaRegistryClient("test", ActorSystem.create(), Materializer(), new ExecutionContext);

现在 ActorSystem.create() 似乎是有效的(至少编译器没有对此大喊大叫),但是我无法初始化 Materializer 和 ExecutionContext,因为它们是抽象的。另外值得一提的是,Materializer 是 akka.stream.Materializer 而 ExecutionContext 是 scala.concurrent.ExecutionContext.

我尝试使用这个 AsyncSchemaRegistryClient 的原因是它已经设置了很多代码来正确调用模式注册表并处理它是否返回有效的模式数据并且似乎是在我的程序中对模式实施异步检查的最简单方法。

提前感谢您的所有建议!

尝试

ActorSystem system = ActorSystem.create();
ExecutionContextExecutor ec = system.dispatcher();
ActorMaterializer mat = ActorMaterializer.create(system);

new AsyncSchemaRegistryClient("test", system, mat, ec);