gpt4 book ai didi

java - Snakeyaml 命名约定

转载 作者:行者123 更新时间:2023-12-02 02:00:36 27 4
gpt4 key购买 nike

据我所知,关于 yaml 命名约定的建议似乎是遵循软件约定,因此在我的例子中是 Java。

我收到了一个具有以下语法的 yaml 文件

PERSON:
NAME: John Doe

除非我从一个人更改为另一个人,否则我无法让 Snakeyaml 正确映射到我的 Person 对象。我还尝试过其他变量名称,但似乎只有驼峰式或小写对象名称有效。当我从 PERSON 更改为 person 时,我可以读取全部大写的属性 NAME,而不会出现任何问题。有人能解释一下为什么会出现这种情况吗?

public class Configuration {

private Person person;

public Configuration() {
person = new Person();
}

public Person getPerson() {
return person;
}

public void setPerson(Person person) {
this.person = person;
}

}

当我在 yaml 文件中大写 PERSON 时,无论 getter/setter 的语法如何,我都无法让 Snakeyaml 加载它。我已经尝试使用 getPERSON/setPERSON 将我的实例变量设置为 PERSON,但除非我在 yaml 文件中更改为 person,否则它不起作用。

最佳答案

您需要在 yaml 文件中提供字段名称,因为 Snakeyaml 内部使用 Reflection Api

所以你的类看起来像这样 -

 class Configuration {

public Person PERSON;

public Person getPERSON() {
return PERSON;
}

public void setPERSON(Person PERSON) {
this.PERSON = PERSON;
}
}

class Person {

public String NAME;

public String getNAME() {
return NAME;
}

public void setNAME(String NAME) {
this.NAME = NAME;
}
}

请注意,字段需要公开,如所述 here

然后您需要将参数传递给构造函数类对象作为您的根类。

Yaml yaml = new Yaml(new Constructor(Configuration.class));

完整代码..

class Test {

public static void main(String[] args) throws FileNotFoundException {
String filePath = "path/to/configuartion/file/configuration.yaml";
InputStream input = new FileInputStream(new File(filePath));
Yaml yaml = new Yaml(new Constructor(Configuration.class));
Configuration configuration = yaml.load(input);
}
}

关于java - Snakeyaml 命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51641265/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com