Scala如何隐式使抽象方法成为有效参数,以便可以在Java中使用方法

时间:2019-06-19 16:59:50

标签: java scala asynchronous akka scala-java-interop

所以这是一个奇怪的问题,但是我试图利用scala中的一段代码并采用一组参数。在scala中,参数是隐式的,因此scala可以发挥其魔力来填充那些对象所需的内容。但是,由于我无法使抽象对象在Java中成为“隐式”,因此我需要弄清楚如何创建该对象,但是这对我一生来说都是不可能的。

以下是scala代码:

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

因此,这是由原始代码中的另一种方法调用的(在Guice Inject和子模块的较长曲折路径中,很难按原样进行操作),我正在尝试像这样在Java代码中调用它: / p>

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

现在ActorSystem.create()似乎是有效的(至少编译器对此不大喊大叫),但是我不能初始化的Materializer和ExecutionContext是抽象的。同样值得一提的是,Materializer是akka.stream.Materializer和ExecutionContext是scala.concurrent.ExecutionContext。

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

在此先感谢您提供所有建议!

1 个答案:

答案 0 :(得分:1)

尝试

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

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