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