- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试构建一个使用 Jackson Smile 2.6.6 和 jackson-module-scala 的通用 Scala 2.11 Jackson 序列化器。不管出于什么原因,Java 找不到公共(public)的无参数构造函数。尽管下面的类可以编译,但我在运行时从 Kafka 客户端收到以下错误:
Caused by: org.apache.kafka.common.KafkaException: Could not instantiate class ai.bernie.api.util.serialization.kafka.JacksonGenericSerializer Does it have a public no-argument constructor?
at org.apache.kafka.common.utils.Utils.newInstance(Utils.java:318) ~[kafka-clients-0.10.0.0.jar:na]
at org.apache.kafka.common.config.AbstractConfig.getConfiguredInstance(AbstractConfig.java:201) ~[kafka-clients-0.10.0.0.jar:na]
at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:671) ~[kafka-clients-0.10.0.0.jar:na]
... 27 common frames omitted
Caused by: java.lang.InstantiationException: ai.bernie.api.util.serialization.kafka.JacksonGenericSerializer
at java.lang.Class.newInstance(Class.java:427) ~[na:1.8.0_51]
at org.apache.kafka.common.utils.Utils.newInstance(Utils.java:314) ~[kafka-clients-0.10.0.0.jar:na]
... 29 common frames omitted
Caused by: java.lang.NoSuchMethodException: ai.bernie.api.util.serialization.kafka.JacksonGenericSerializer.<init>()
at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_51]
at java.lang.Class.newInstance(Class.java:412) ~[na:1.8.0_51]
... 30 common frames omitted
这是类,我该如何修复它?我尝试了使用 final def
并将私有(private) var 移入类中的各种组合,尽管我可能做错了,但也尝试使用无参数 apply 创建一个伴生对象
方法。
class JacksonGenericSerializer[T: Manifest] private (
private var mapper: ObjectMapper with ScalaObjectMapper = null
) extends Closeable with AutoCloseable with Serializer[T] with Deserializer[T] {
final def this() = this(new ObjectMapper(new SmileFactory) with ScalaObjectMapper)
override def configure(map: java.util.Map[String, _], b: Boolean) {
if (mapper == null) {
mapper = new ObjectMapper(new SmileFactory) with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
}
}
override def serialize(s: String, record: T): Array[Byte] = {
try {
mapper.writeValueAsBytes(record)
}
catch {
case e: JsonProcessingException => {
throw new IllegalArgumentException(e)
}
}
}
override def deserialize(s: String, bytes: Array[Byte]): T = {
try {
mapper.readValue[T](bytes)
}
catch {
case e: IOException => {
throw new IllegalArgumentException(e)
}
}
}
override def close {
mapper = null
}
}
我还应该提到,我正在使用 Google Guice,尽管我怀疑它会影响这一点,因为序列化类本身没有被注入(inject),只有使用它的 Kafka Consumer/Producer 父类。
最佳答案
因为 JacksonGenericSerializer
类型参数具有上下文绑定(bind)(即 [T: Manifest]
),辅助“无参数”构造函数实际上采用一个参数:Manifest [T]
您可以使用 javap 确认这一点:
$ javap JacksonGenericSerializer.class
Compiled from "JacksonGenericSerializer.scala"
public class JacksonGenericSerializer<T> implements java.io.Closeable, java.lang.AutoCloseable, org.apache.kafka.common.serialization.Serializer<T>, org.apache.kafka.common.serialization.Deserializer<T> {
public void configure(java.util.Map<java.lang.String, ?>, boolean);
public byte[] serialize(java.lang.String, T);
public T deserialize(java.lang.String, byte[]);
public void close();
public JacksonGenericSerializer(scala.reflect.Manifest<T>);
}
关于java - Scala 类 Final def this() 声明没有公共(public)无参构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37635416/
有人可以解释一下接下来的事情有什么区别吗? def self.up 定义 def self.down 下 最佳答案 self.up和up包含执行rake db:migrate时由迁移运行的代码。 se
我在从第三个(主)函数调用前两个函数时遇到问题。我相信我的编码正确(忽略大小和 x,y 坐标)来显示 di 的五边,但似乎无法弄清楚如何调用这些函数。 主要目标是显示 di 的五个面。 def dot
我想做这样的事情: class MyClass(Object): def ****(self): print self.__name __ MyClass.test() ->t
我只是环顾四周,以减少在 liquibase 上创建表的工作量和错误。 是否可以为表创建一组默认列? 列: 内部ID 可变字符 UUID 时间戳创建Ts 时间戳更新Ts int 锁定版本 约束 ID
在注释宏中,我枚举了一个类的成员,并且想要找到我找到的方法的类型。 所以我很高兴地遍历 body类的,并收集所有DefDef成员。 ...我无法进行类型检查。 对于每个 DefDef我尝试将其包装在
我正在查看的一些代码中的示例 class X { def k1 = column[Int]("k1") def k2 = column[Int]("k2") def * = (
我是一个时髦的初学者。 我很困惑是否使用了“def”。 def str = "hello" print str 对比 str = "hello" print str 从这个例子。结果是一样的。但我想知
我想做这样的事情: class Result<
我正在尝试理解这个函数。 我看到的是一个属性和类型被传递给了 opal () 方法。 然后type_name取值自 type只要type是 Symbol或 String .否则,name在 type
在此Haskell-like comprehensions implementation in Ruby有一些我在 Ruby 中从未见过的代码: class Array def +@ #
我的问题非常简单,但不幸的是我找不到解决方法。 我想运行一个 def A,它仅从 def B 返回多个值一次。 我写了这段代码: def A(): x = 1 y = 2 z
我在 def 声明中使用 Scalameta(v1.8.0) 注释: trait MyTrait { @MyDeclDef def f2(): Int } 定义的注释类只返回输入,如下所示:
写private[this] def与 private def 相比,在性能噪声比方面是有意义的?我知道这对 private[this] val 有影响超过 private val因为前者允许 sca
在下面的代码段(取自 Groovy Semantics Manual page )中,为什么要在赋值前加上关键字 def ? def x = 0 def y = 5 while ( y-- > 0 )
作为标题,Groovy中这两个定义的确切区别是什么? 也许是文档问题,我什么也找不到... 最佳答案 没有static的方法声明将方法标记为实例方法。带有static的声明将使此方法静态-可以在不创建
我正在使用 d3.js 强制导向图。它有节点和连接它们的链接。为了创建箭头,我使用 svg 和 d3 组合起来,如下所示: gA.svg.append('defs').selectAll('m
我经常看到包含 def execute(self) 和 def run() 的类 python 会像 C++ 中的 int main() 那样自动获取它吗? 最佳答案 Python 是一种解释型语言,
此代码无法编译: object Foo { implicit def toString(i: Int): String = i.toString def foo(x: String)
例如我需要在函数 def a[A:ClassManifest] 中访问 list 获得删除类。我可以使用 Predef.implicitly 函数,但在这种情况下,我的代码将与我使用完整形式 def
我知道scala中的空参数方法和无参数方法之间的用法差异,我的问题与生成的类文件有关。当我在javap中查看这两个类时,它们看起来完全相同: class Foo { def bar() = 123
我是一名优秀的程序员,十分优秀!