Как создать scala-объект в clojure

Я пытаюсь создать объект Scala, kafka.utils.ZKStringSerializer в ближайшем будущем. (Оно в 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")
  }
}

1 ответ

Решение

Все объекты scala являются синглетонами с точки зрения java, Нет публичного конструктора. Вы должны использовать статическое поле MODULE$ чтобы получить экземпляр синглтона.

Я не знаю clojure, но, согласно этой странице, похоже, что вы должны использовать это:

ZKStringSerializer$/MODULE$

Также обратите внимание, что фактическое имя типа объекта содержит $ как последний персонаж.

Другие вопросы по тегам