466 Stimmen

Sollte ich Jacksons ObjectMapper als statisches Feld deklarieren?

Die Bibliothek von Jackson ObjectMapper Klasse scheint thread-sicher zu sein .

Bedeutet dies, dass ich meine ObjectMapper als statisches Feld wie folgt

class Me {
    private static final ObjectMapper mapper = new ObjectMapper();
}

statt als Feld auf Instanzebene wie hier?

class Me {
    private final ObjectMapper mapper = new ObjectMapper();
}

1voto

Oliver Punkte 812

Diese Frage mag alt sein, aber ich mache Folgendes.

Halten Sie die ObjectMapper Instanz in einem Thread-sicheren Singleton:

public final class JacksonObjectMapperHolder {

  private static volatile JacksonObjectMapperHolder INSTANCE;

  private static final Object MUTEX = new Object();

  public static JacksonObjectMapperHolder getInstance() {
    JacksonObjectMapperHolder instance = INSTANCE;

    if(instance == null) {
      synchronized(MUTEX) {
        instance = INSTANCE;

        if(instance == null) {
          INSTANCE = instance = new JacksonObjectMapperHolder();
        }
      }
    }

    return instance;
  }

  private final ObjectMapper objectMapper = new ObjectMapper();

  private JacksonObjectMapperHolder() {
    super();
  }

  public final ObjectMapper getObjectMapper() {
    return objectMapper;
  }

}

0 Stimmen

Sie brauchen nicht: private JacksonObjectMapperHolder() { super(); } ... abgesehen von dieser großartigen Lösung, wenn Sie den ObjectMapper und nicht den Reader/Writer benötigen

0 Stimmen

@RoieBeck Ich stimme teilweise zu. Die Klasse ist final Daher ist ein implizit deklarierter Konstruktor kein Problem für die Vererbung. Ich möchte jedoch eine versehentliche Instanziierung vermeiden, also deklariere ich den Konstruktor explizit und markiere ihn private . Der mühsame Anruf bei super ist ein Hinweis darauf, dass ich impliziten Code vermeiden möchte.

1 Stimmen

Nur meine 2 Cent es ist Ihr Code :), btw ich ging mit der ThreadLocal<OM> Lösung, wie es das gleiche Ziel zu erreichen, aber es ist eleganter ich denke...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X