java - SnakeYAML 多态性

标签 java polymorphism snakeyaml

我想使用 SnakeYAML(或其他解析器)解析 Docker-compose.yml。我遇到的问题是属性可以是字符串或更复杂的对象,例如 configs ,支持“短”语法和“长”语法:

简短

version: "3.3"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_config
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

version: "3.3"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - source: my_config
        target: /redis_config
        uid: '103'
        gid: '103'
        mode: 0440
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

如何将其映射到 SnakeYAML?目前,我已经创建了 Java Bean 来对不同元素进行建模,并将模型配置设置为 List<String>但这显然只适用于短语法。

最佳答案

如果 SnakeYaml 遇到需要反序列化对象的 String,它会查找带有 String 参数的构造函数。

因此,在示例中,为 config 的长语法定义一个 JavaBean 就足够了,然后向其添加一个以短语法作为参数的构造函数。

关于java - SnakeYAML 多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54886815/

相关文章:

java - 单击按钮时禁用 JTextPane 上的编辑 (Java)

java - 使用 Intent 切换 Activity 时出现问题

java - Android 空指针异常。为什么?

c# - 从一个通用方法传递对象,其中 T : MyClass to another where T : DerivedClass

java - 使用 JGit 推送更改的文件时遇到 TransportException "Nothing to push"

java - 在 JPA 实体本身之前保留/保存该实体的关系

c++ - 具有非类型模板参数的多态性

Haskell 不想输入高级多态性

grails - 从YAML通过关联加载GORM

yaml - Yaml 中的三元运算符