Map<String, Integer>
주위에 간단한 래퍼 유형이 있습니다.이 유형은 SnakeYAML로 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
로하고 FIELD
의 BeanAccess
을 사용하고 있습니다. 포함하는 클래스에 넣을 때,이 같은 dumpAsMap
YAML을 얻을 :
flags:
_flags: {}
내가 대신 덤프 SnakeYAML을 좀하고 싶습니다 :
flags: {}
가 어떻게이 단일의 플래트 닝을 수행 할 수 있습니다 요소 레이어? 내부 변수가 private이고 랩핑 유형이 랩핑 된 유형으로 효과적으로 작동해야하므로 랩핑 유형이 랩핑 된 유형처럼 직렬화되어야한다는 것이 좋습니다.
기본적으로 랩핑 유형이 인 것처럼 이 직렬화되기를 원합니다. 래핑 된 변수 외부에서이 클래스에 대해 serialize해야하는 다른 변수가 없으며 절대로 존재하지 않습니다. 포장 유형의 유형 선언을 변경하는 방법에 대해 열려 있지만 포장 유형은 사용 사례를 위해 남아 있어야합니다.
실행 가능한 재생 경우에 대한전체 소스 :
이 같은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);
}
}
I :
이처럼 사용 포장 된 각 유형에 대해 사용자 정의 '표현'을 쓰지 않고도 가능했으면 좋겠지 만 현재로서는 이것이 가장 좋은 방법 인 것 같습니다. deserialization에 대한 의견은 완벽한 해답이 될 것입니다. – CAD97
(테스트 및 작동) – CAD97
비 직렬화의 경우 [documentation] (https://bitbucket.org/asomov/snakeyaml/wiki/Documentation#markdown-header-constructors-representers-resolvers)에서 예제 코드를 쉽게 적용 할 수 있습니다. 나는 표현을 위해 한 것처럼. – flyx