|
7 | 7 | import com.fasterxml.jackson.databind.cfg.MapperConfig;
|
8 | 8 |
|
9 | 9 | /**
|
10 |
| - * Helper class used for storing String serializations of |
11 |
| - * enumerations. |
| 10 | + * Helper class used for storing String serializations of {@code Enum}s, |
| 11 | + * to match to/from external representations. |
12 | 12 | */
|
13 | 13 | public final class EnumValues
|
14 | 14 | implements java.io.Serializable
|
@@ -58,23 +58,44 @@ public static EnumValues constructFromName(MapperConfig<?> config, Class<Enum<?>
|
58 | 58 | }
|
59 | 59 | textual[en.ordinal()] = config.compileString(name);
|
60 | 60 | }
|
61 |
| - return new EnumValues(enumClass, textual); |
| 61 | + return construct(enumClass, textual); |
62 | 62 | }
|
63 | 63 |
|
64 | 64 | public static EnumValues constructFromToString(MapperConfig<?> config, Class<Enum<?>> enumClass)
|
65 | 65 | {
|
66 | 66 | Class<? extends Enum<?>> cls = ClassUtil.findEnumType(enumClass);
|
67 | 67 | Enum<?>[] values = cls.getEnumConstants();
|
68 |
| - if (values != null) { |
69 |
| - SerializableString[] textual = new SerializableString[values.length]; |
70 |
| - for (Enum<?> en : values) { |
71 |
| - textual[en.ordinal()] = config.compileString(en.toString()); |
72 |
| - } |
73 |
| - return new EnumValues(enumClass, textual); |
| 68 | + if (values == null) { // can this ever occur? |
| 69 | + throw new IllegalArgumentException("Cannot determine enum constants for Class "+enumClass.getName()); |
| 70 | + } |
| 71 | + ArrayList<String> external = new ArrayList<>(values.length); |
| 72 | + for (Enum<?> en : values) { |
| 73 | + external.add(en.toString()); |
74 | 74 | }
|
75 |
| - throw new IllegalArgumentException("Cannot determine enum constants for Class "+enumClass.getName()); |
| 75 | + return construct(config, enumClass, external); |
76 | 76 | }
|
77 | 77 |
|
| 78 | + /** |
| 79 | + * @since 2.11 |
| 80 | + */ |
| 81 | + public static EnumValues construct(MapperConfig<?> config, Class<Enum<?>> enumClass, |
| 82 | + List<String> externalValues) { |
| 83 | + final int len = externalValues.size(); |
| 84 | + SerializableString[] textual = new SerializableString[len]; |
| 85 | + for (int i = 0; i < len; ++i) { |
| 86 | + textual[i] = config.compileString(externalValues.get(i)); |
| 87 | + } |
| 88 | + return construct(enumClass, textual); |
| 89 | + } |
| 90 | + |
| 91 | + /** |
| 92 | + * @since 2.11 |
| 93 | + */ |
| 94 | + public static EnumValues construct(Class<Enum<?>> enumClass, |
| 95 | + SerializableString[] externalValues) { |
| 96 | + return new EnumValues(enumClass, externalValues); |
| 97 | + } |
| 98 | + |
78 | 99 | public SerializableString serializedValueFor(Enum<?> key) {
|
79 | 100 | return _textual[key.ordinal()];
|
80 | 101 | }
|
|
0 commit comments