scala - 如何在clojure中创建一个scala对象

标签 scala clojure apache-kafka

我正在尝试创建一个 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")
  }
}

最佳答案

所有 scala 对象在 java 方面都是单例的。 .没有公共(public)构造函数。您应该使用静态字段 MODULE$获取单例的实例。

我不知道clojure , 但根据 this page看起来你应该使用这个:

ZKStringSerializer$/MODULE$

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

关于scala - 如何在clojure中创建一个scala对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21327960/

相关文章:

xml - 使用 data.zip 在 Clojure 中解析 XML 时出现 OutOfMemoryError

ios - 如何通过 Web 服务器作为中间层将 Kafka 消费者集成到移动应用程序?

apache-kafka - kafka + 如何计算 log.retention.byte 的值

scala - 由 : java. sql.SQLException : JDBC4 Connection. isValid() 方法引起不支持

java - Scala 在 if/else 语句中返回对象类型

map - Clojure,将一个函数映射到两个参数,一个参数是固定的,另一个从列表中获取

clojure - 我如何编写一个 Clojure REPL 应用程序?

scala - 在Spark群集上运行Drools-在org.kie.internal.builder.KnowledgeBuilderFactory.newKnowledgeBuilder处获取空指针

algorithm - Scala中值实现

apache-kafka - Kafka - 如果分区丢失如何恢复?