package org.test4j.json.helper; import java.util.ArrayList; import java.util.List; /** * json编码特性 * * @author darui.wudr */ public enum JSONFeature { /** * 标记对应的class类型<br> * eg: "#class:org.test4j.bean.User" */ UnMarkClassFlag, /** * 给字段名称加引号<br> * "fiendname":"fieldvalue" */ QuoteAllItems, /** * 用单引号替代双引号<br> * 'fieldname':'fieldvalue' */ UseSingleQuote, /** * 忽略null字段和属性 */ SkipNullValue, /** * 是否忽略显式的字段类型输出<br> * 当field字段类型等于实际对象的类型时 */ IgnoreExplicitFieldType; private JSONFeature() { mask = (1 << ordinal()); } private final int mask; public final int getMask() { return mask; } /** * 根据掩码值判断某个特性是否有效 * * @param features * @param feature * @return */ public static boolean isEnabled(int features, JSONFeature feature) { return (features & feature.getMask()) != 0; } /** * 返回特性值的掩码 * * @param features * @return */ public static int getFeaturesMask(JSONFeature... features) { int marks = 0; for (JSONFeature feature : features) { int mark = feature.mask; marks = marks | mark; } return marks; } /** * 根据掩码值返回特性列表 * * @param features * @return */ public static List<JSONFeature> getSerializerFeatures(int features) { JSONFeature[] values = JSONFeature.values(); List<JSONFeature> list = new ArrayList<JSONFeature>(); for (JSONFeature value : values) { boolean isEnabled = isEnabled(features, value); if (isEnabled) { list.add(value); } } return list; } /** * 类型标识 */ public static final String ClazzFlag = "#class"; /** * 单值标识 */ public static final String ValueFlag = "#value"; /** * 引用标识 */ public static final String ReferFlag = "#refer"; /** * 异常标识 */ public static final String ErrroFlag = "#error"; }