是否可以使用BeanIO注释将字段定义为抽象类的集合,或实现接口的类的集合?
我想要的是:
@Record(minOccurs = 1, maxOccurs = -1, collection = List.class)
List<SomeInterface> records;
然后,我向集合提供了一个不同具体类的列表,其中包含用于定义有效记录的所有注释。
然而,我只是得到一个错误说
Repeating segments without any child field component must have minOccurs=maxOccurs
这有点违背目的。
我尝试过的一些东西:
- 将流设置为writeOnly
- 使用抽象类而不是接口
编辑:这是我的配置:
StreamFactory factory = StreamFactory.newInstance();
StreamBuilder builder = new StreamBuilder("MyStreamName")
.writeOnly()
.format("delimited")
.parser(new DelimitedParserBuilder(','))
.addGroup(Parent.class);
factory.define(builder);
而Parent.class包含List<SomeInterface>记录;
从逻辑上讲,应该有一些东西将SomeInterface与接口的具体实现联系起来,这样BeanIO就可以知道该做什么,但我似乎不知道如何建立这种连接。
以下对我有效:
import org.beanio.annotation.Record;
@Record(name = "parentRecord", maxOccurs = 1, minOccurs = 1, collection = List.class)
public class Parent {
@Record(minOccurs = 1, collection = List.class, name = "recordList")
private List<A> records;
// getter + setter
}
Parent
类现在是@Record
,需要将StreamBuilder
更改为
final StreamFactory factory = StreamFactory.newInstance();
final StreamBuilder builder = new StreamBuilder("MyStreamName")
.writeOnly()
.format("delimited")
.parser(new DelimitedParserBuilder(','))
.addRecord(Parent.class);
factory.define(builder);
这对我来说没有任何例外