【发布时间】:2015-01-08 17:22:20
【问题描述】:
Apache Avro GenericRecord.get(colName) 做了(脏?)返回对象的技巧,因此它可以返回它想要的任何类型。 Object 包含其他类型:String、Int、Date 等。值可以为 null。
例子:
val one = genericRecord.get("hello") // "hello" resolves to an Int
val two = genericRecord.get("goodbye") // "goodbye" resolves to a String
"one" 和 "two" 是 Object 类型,但它们“实际上”分别是 Int 和 String。
我正在尝试编写一个隐式类方法来返回带有结果的 Option(<actual_type>)(以避免处理 null 情况),所以我可以编写
val myVal = genericRecord.getWithType("hello")
并让 myVal 为 Option[Int] 类型。
尝试了以下方法:
one match {
case i: Int => Option(i.asInstanceOf[Int])
case s: String => Option(s.toString)
}
但我明白了
error: pattern type is incompatible with expected type;
found : Int
required: Object
case x: Int =>
^
匹配上
one.getClass
也不行。 有没有办法做到这一点?如果是这样,怎么做?
谢谢!
【问题讨论】:
-
您可以使用 GenericData.Record.getSchema 找出“真正的”数据库类型。
-
您可能需要匹配
java.lang.Integer(扩展Object)而不是Int。