1. ホーム

[解決済み】JacksonのObjectMapperはstaticフィールドとして宣言すべき?

2022-03-24 20:35:16

質問

ジャクソン・ライブラリの ObjectMapper クラス はスレッドセーフのようです .

を宣言する必要があるということでしょうか? ObjectMapper を静的フィールドとして使用します。

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

インスタンスレベルのフィールドとしてではなく、このように?

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

解決方法は?

はい、それは安全であり、推奨されることです。

参照したページの唯一の注意点は、一度共有したマッパーの設定を変更してはいけないということですが、設定を変更していないので問題ありません。もし、設定を変更する必要がある場合は、静的ブロックから行うことになりますが、これも問題ありません。

EDIT : (2013/10)

2.0以上では、さらに良い方法があることに注意して、上記を補強することができます。 ObjectWriterObjectReader オブジェクトを構築することができます。 ObjectMapper . これらは完全に不変であり、スレッドセーフであるため、スレッドセーフの問題を引き起こすことは理論的にも不可能です(これは ObjectMapper もしコードがインスタンスを再構成しようとしたら)。