Enums 使用SnakeYAML按值解析枚举
如中所述,从中可以看出,SnakeYAML通过枚举的名称来处理枚举。我想要的是按枚举值解析值,例如: 枚举: 亚马尔:Enums 使用SnakeYAML按值解析枚举,enums,yaml,snakeyaml,Enums,Yaml,Snakeyaml,如中所述,从中可以看出,SnakeYAML通过枚举的名称来处理枚举。我想要的是按枚举值解析值,例如: 枚举: 亚马尔: 原因是我们的代码风格迫使我们对枚举常量使用大写,而我希望yaml文件中的数据保持小写。据我所知,这是不可能的。枚举常量是私有的,因此其他类无法访问,因此YAML解析器将无法构造对象 虽然不是完美的,但您可以使用创建枚举的昵称 还有另一种方法可以做到这一点。可能它不干净,但工作正常 通过扩展org.yaml.snakeyaml.Constructor.Constructor创
原因是我们的代码风格迫使我们对枚举常量使用大写,而我希望yaml文件中的数据保持小写。据我所知,这是不可能的。枚举常量是私有的,因此其他类无法访问,因此YAML解析器将无法构造对象
虽然不是完美的,但您可以使用创建枚举的昵称 还有另一种方法可以做到这一点。可能它不干净,但工作正常
org.yaml.snakeyaml.Constructor.Constructor
创建一个新的构造函数类ScalarConstructor
受保护类
,其代码实现与基本ScalarConstructor
类中的代码实现相同,但枚举解析实现除外constructStandardJavaInstance
中,检查enum
是否存在大写或小写名称Yaml
对象(步骤1)嗯,有趣的概念。好的,对于枚举,如果SnakeYAML内部有这个处理,那么就可以使用
valueOf
方法。我想让你看看是否可以在另一个yaml文件中包含一个yaml文件,所以在一个yaml中定义所有别名,然后将其包含在所有其他文件中,以便隐藏别名。不幸的是,这是不可能的:(我认为您只需要处理yaml中的大写字母。或者只是将它们解析为字符串,或者在代码中转换为枚举。我也建议这样做。只需将它们存储为字符串,然后将它们转换为java对象中的枚举:)我还想知道您是否可以让snakeyaml使用除valueOf(…)
之外的方法,但后来我发现这篇文章:听起来几乎不可能。但是,是的,如果你想保持小写,我会将它们存储为字符串,然后在加载时解析它们。。。我从上游snakeyaml存储库创建了fork,并添加了配置区分大小写的功能。我正在等待拉取请求的批准,并将其添加到主分支。我的拉取请求已被接受。它将以1.28版交付
public enum Strategy {
ALWAYS_RUN("always-run"),
ALWAYS_SKIP("always-skip"),
DEPENDS("depends");
...
}
branches:
trunk: always-skip
bugfix: depends
default: always-run