Как создать 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$
Также обратите внимание, что фактическое имя типа объекта содержит $
как последний персонаж.