Jackson の ObjectMapper を静的フィールドとして宣言する必要がありますか? 質問する

Jackson の ObjectMapper を静的フィールドとして宣言する必要がありますか? 質問する

ジャクソン図書館のObjectMapperクラススレッドセーフのようです

ObjectMapperこれは、次のように静的フィールドとして宣言する必要があることを意味しますか?

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

代わりに、次のようにインスタンス レベルのフィールドとして使用しますか?

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

ベストアンサー1

はい、それは安全であり、推奨されます。

参照したページの唯一の注意点は、マッパーが共有されると、その構成を変更できないことです。ただし、構成は変更していないので問題ありません。構成を変更する必要がある場合は、静的ブロックから変更すれば問題ありません。

編集: (2013/10)

2.0 以降では、さらに優れた方法があることに留意して、上記を拡張できます。ObjectWriterおよびObjectReaderオブジェクトを使用します。これらは によって構築できます。これらは完全に不変で、スレッドセーフです。つまり、スレッドセーフの問題 (コードがインスタンスを再構成しようとした場合ObjectMapperに で発生する可能性がある) が発生する可能性は理論的にもありません。ObjectMapper

おすすめ記事