Chcę użyć API Jackson Stream, aby analizować POJO, który zawiera enyum w czasie wykonywania, takich jak:

Class<Enum<?>> enumClass = field.getType();
JsonParser parser = ...;
String s = parser.getValueAsString();
Enum enum = (Enum)isThereAnyBiFunctionCanGetDynamicEnum(s, enumClass);

Czy mogę wymieszać rozwiązanie DataBind i Stream API, tj. Użyj ObjectReader, aby uzyskać Enum:

ObjectReader reader = ...;
Enum enum = (Enum)reader.readValue(parser, enumClass);

Czuję, że to może nie być dobra praktyka, czy ktoś może przewodnik.
Dzięki!

1
Peter Peng 1 styczeń 2020, 19:32

1 odpowiedź

Najlepsza odpowiedź

Możesz spróbować użyć klasy org.apache.commons.lang3.EnumUtils i Getenum Metoda:

import org.apache.commons.lang3.EnumUtils;

public class EnumApp {

    enum Type {
        INT,
        STRING
    }

    public static void main(String[] args) {
        System.out.println(EnumUtils.getEnum(Type.class, "INT"));
        System.out.println(EnumUtils.getEnum(Type.class, "STRING"));
        System.out.println(EnumUtils.getEnum(Type.class, "STRING1"));
    }
}

Powyższy kod drukuje:

INT
STRING
null

Ale używając ObjectMapper API, dzwoniąc:

reader.readValue(parser, enumClass);

Jest również w porządku i nie ma w tym nic złego.

0
Michał Ziober 2 styczeń 2020, 19:01