如何在clojure中创建scala对象

juud5qan  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(283)

我想创建一个scala对象, kafka.utils.ZKStringSerializer 在clojure(它在里面 org.apache.kafka/kafka_2.10 "0.8.0" )
因为我对scala知之甚少,所以我不知道如何调用它的构造函数。我试着这样:

(import 'kafka.utils.ZKStringSerializer)
(ZKStringSerializer.)                      
; or (new ZKStringSerializer)

出现了一个错误: CompilerException java.lang.IllegalArgumentException: No matching ctor found for class kafka.utils.ZKStringSerializer 我试过用 (clojure.reflect/reflect ZKStringSerializer) 查看其方法,但只有一些静态方法。以及 (class ZKStringSerializer) 告诉我这是一个类,不是我想要的示例。
对象的实现方式如下:

object ZKStringSerializer extends ZkSerializer {

  @throws(classOf[ZkMarshallingError])
  def serialize(data : Object) : Array[Byte] = data.asInstanceOf[String].getBytes("UTF-8")

  @throws(classOf[ZkMarshallingError])
  def deserialize(bytes : Array[Byte]) : Object = {
    if (bytes == null)
      null
    else
      new String(bytes, "UTF-8")
  }
}
y4ekin9u

y4ekin9u1#

所有scala对象都是单例对象 java . 没有公共构造函数。你应该使用静态场 MODULE$ 获取singleton的示例。
我不知道 clojure ,但根据本页显示,您应该使用:

ZKStringSerializer$/MODULE$

还要注意,对象的实际类型名包含 $ 作为最后一个字符。

相关问题