SnakeYaml如何处理对象继承?

时间:2017-08-16 06:22:47

标签: inheritance yaml snakeyaml

我有像这样的yml文件

 Staff:
 - name: chris
   type: intern
   hourlywage: 20
 - name: kevin
   type: full
   level: 9

我想解析这个yml文件以获取一个InternStaff对象和一个FullStaff对象。有没有办法做到这一点?

class Staff {
    String name;
}

class InternStaff extends Staff {
    String hourlyWage;
}
Class FullStaff extends Staff {
    String level;
}

1 个答案:

答案 0 :(得分:2)

Staff:
- !!InternStaff
  name: chris
  hourlyWage: 20
- !!FullStaff
  name: kevin
  level: 9

!! 之后的部分必须是合格的类名(包括类'包,如果有的话)。

如果您想保留语法(使用type: intern而非标签),请参阅SnakeYaml docs for custom constructors and representers。使用一些代码,您还可以使标记更适合编写者:

Staff:
- !intern
  name: chris
  hourlyWage: 20
- !full
  name: kevin
  level: 9

这需要为!intern!full标记注册自定义构造函数。