如何在clojure中创建scala对象
我试图在clojure中创建一个scala对象,如何在clojure中创建scala对象,scala,clojure,apache-kafka,Scala,Clojure,Apache Kafka,我试图在clojure中创建一个scala对象,kafka.utils.ZKStringSerializer。(位于org.apache.kafka/kafka_2.10“0.8.0”) 因为我对scala知之甚少,所以我不知道如何调用它的构造函数。我试着这样做: (import 'kafka.utils.ZKStringSerializer) (ZKStringSerializer.) ; or (new ZKStringSerializer) o
kafka.utils.ZKStringSerializer
。(位于org.apache.kafka/kafka_2.10“0.8.0”
)
因为我对scala知之甚少,所以我不知道如何调用它的构造函数。我试着这样做:
(import 'kafka.utils.ZKStringSerializer)
(ZKStringSerializer.)
; or (new 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")
}
}
并出现错误:CompilerException java.lang.IllegalArgumentException:找不到类kafka.utils.ZKStringSerializer的匹配构造函数
我尝试使用(clojure.reflect/reflect ZKStringSerializer)
查看其方法,但只有一些静态方法。(class ZKStringSerializer)
告诉我它是一个类,而不是我想要的实例
对象的实现方式如下:
(import 'kafka.utils.ZKStringSerializer)
(ZKStringSerializer.)
; or (new 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")
}
}
就
java
而言,所有scala对象都是单例对象。没有公共构造函数。您应该使用静态字段模块$
来获取singleton的实例
我不知道clojure
,但据我所知,您应该使用:
ZKStringSerializer$/MODULE$
还请注意,对象的实际类型名包含
$
作为最后一个字符。有效!谢谢!我以前不知道$
表示法。@halfelf:看一看同伴对象:类测试;对象测试
。singleton的实例应该有一个类,但类名Test
已经在使用中。scala中不推荐手动使用$
:所有合成术语名称都包含$
@halfelf:实际上并非所有合成术语名称都包含$
,只有不应手动使用的方法。