3

正如文档中指定的和从源代码中看到的那样,SnakeYAML 按名称使用枚举。我想要的是按枚举值解析值,例如:

枚举:

public enum Strategy {
    ALWAYS_RUN("always-run"),
    ALWAYS_SKIP("always-skip"),
    DEPENDS("depends");
    ...
}

YAML:

branches:
  trunk: always-skip
  bugfix: depends
  default: always-run

原因是我们的代码风格迫使我们对枚举常量使用大写,而我想将 yaml 文件中的数据保留为小写。

4

2 回答 2

2

据我所知,这是不可能的。枚举常量是私有的,因此其他类无法访问,因此 YAML 解析器将无法构造对象。

虽然并不完美,但您可以使用别名为枚举创建昵称。

于 2014-08-01T11:43:09.390 回答
0

还有另一种方法可以做到这一点。可能它不干净,但工作正常。

  1. 通过扩展创建一个新的 Constructor 类org.yaml.snakeyaml.constructor.Constructor
  2. 在它内部创建一个ScalarConstuctor protected class与基ScalarConstructor类相同的代码实现,除了枚举解析实现。
  3. 在方法中constructStandardJavaInstance检查是否enum存在大写或小写名称。
  4. 最后Yaml使用构造函数创建对象(步骤 1)
于 2021-01-05T00:09:48.450 回答