У меня есть тип, который представляет собой простую оболочку вокруг Map<String, Integer>
, которую я выгружаю в YAML с помощью SnakeYAML.
Например:
class Flags {
private final Map<String, Boolean> _flags = new HashMap<>();
Boolean get(String flag) {
return _flags.containsKey(flag) ? _flags.get(flag) : false;
}
boolean put(String flag, Boolean value) {
return _flags.put(flag, value);
}
}
В настоящее время я использую DumperOptions
с allowReadOnlyProperties = true
и BeanAccess
из FIELD
, чтобы правильно сбросить этот класс. Когда я помещаю в содержащий класс, я получаю dumpAsMap
YAML следующим образом:
flags:
_flags: {}
Я бы хотел, чтобы SnakeYAML сбросил это вместо этого:
flags: {}
Как я могу выполнить это сглаживание одноэлементного слоя? Поскольку внутренняя переменная является частной, а тип упаковки должен эффективно действовать как обернутый тип, имеет смысл сериализовать тип упаковки, как если бы он был обернутым типом.
По сути, я хочу, чтобы тип упаковки был сериализован , как если бы это был тип оболочки. Нет и никогда не будет других переменных, которые необходимо сериализовать в этом классе вне обернутая переменная. Я открыт для изменения объявления типа типа упаковки, но тип упаковки должен остаться для моего варианта использования.
Полный исходный код для работоспособного варианта воспроизведения:
import org.yaml.snakeyaml.*;
import org.yaml.snakeyaml.introspector.*;
import java.util.*;
public class Example {
private final Flags flags = new Flags();
public Flags getFlags() { return flags; }
public static void main(String[] args) {
DumperOptions options = new DumperOptions();
options.setAllowReadOnlyProperties(true);
Yaml yaml = new Yaml(options);
yaml.setBeanAccess(BeanAccess.FIELD);
System.out.println(yaml.dumpAsMap(new Example()));
}
}
class Flags {
private final Map<String, Boolean> _flags = new HashMap<>();
Boolean get(String flag) {
return _flags.containsKey(flag) ? _flags.get(flag) : false;
}
boolean put(String flag, Boolean value) {
return _flags.put(flag, value);
}
}