【问题标题】:Avro Array is actually a ListAvro Array 实际上是一个 List
【发布时间】:2017-05-15 15:38:09
【问题描述】:

我使用 .avsc 数据和一个 maven 插件来创建 Java 类。 但是当我想创建这个对象的一个​​实例并在我的构造函数中设置值时,定义的数组被解释为一个值列表。

我的例子:

{"type": "record", "name": "test", "namespace": "testing",
"fields": [
    {"name": "id", "type": ["null", "int"]},
    {"name": "arr", "type": ["null", {"type": "array", "items": "double"}]}
]
}

现在 test t = new test(1, new double[]{1.0,2.0,3.0}) 说需要java.util.List<java.lang.Double>

谁能解释一下?

【问题讨论】:

  • 你能展示你的构造函数来澄清它的定义吗?
  • 在这种情况下,它的代码由 avro:schema 插件生成: publicparticle(java.lang.Integer id, java.util.List arr,) { this.身份证=身份证;这个.arr = arr; }

标签: java arrays list maven avro


【解决方案1】:

您需要传入 List<Double> 而不是 double 的数组,因为这是 Test 构造函数所期望的。

如果您不打算修改列表,则可以使用Arrays.asList

test t = new test(1, Arrays.asList(1.0,2.0,3.0));

但是,如果您打算修改列表,则需要构造一个 List 类型的对象,然后将其传递给构造函数。

List<Double> tempList = new ArrayList<>(Arrays.asList(1.0,2.0,3.0));
test t = new test(1, tempList);

【讨论】:

  • 好的,非常感谢。它现在可以工作,但是你能解释一下为什么 avro 会这样做,而不是将变量初始化为数组吗?
  • @thejoeka 老实说,我以前从未使用过 avro 但可以肯定的是,您的构造函数已经定义了它需要一个 List 这与 double 数组 完全不同。另外,为了回答您的问题而不是将变量初始化为数组?,它确实创建了您的双数组,但它不起作用,因为您再次提供了错误的类型。
猜你喜欢
  • 2019-01-01
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 2016-01-21
  • 2016-07-17
  • 1970-01-01
相关资源
最近更新 更多