それを機能させるには、次のオプションがあります。
サブクラス化による
毎回具体的なジェネリック型でサブクラス化すると、次のように機能します。
public class MyClassCacheEntity extends CacheEntity<MyClass> {}
BsonDocument
を使用する +ジャクソン
サブクラス化を回避するには、任意のオブジェクトをBsonDocument
として保存してみてください。 -sおよびJacksonを使用してそれらをシリアル化/逆シリアル化:
public class CacheEntity<V> {
private String cacheId;
private BsonDocument rawValue;
// [...]
// sets the value
public void withValue(T o) {
this.rawValue = BsonDocument.parse(new ObjectMapper().writeValueAsString(o))
}
// recovers the value
public T value(Class<T> clazz) {
return new ObjectMapper().readValue(this.rawValue.toJson(), clazz);
}
}
これは、withValue()
のゲッター/セッター規則を回避するまで機能します およびvalue()
それ以外の場合、Mongoは同じジェネリックスの問題について不平を言い始めます。
純粋なbsonと同じ
org.bson.codecs.pojo.PojoCodec
を使用して、上記と同じように試すこともできると思います。 これは、現在のmongoコーデックレジストリから作成または抽出できます。事前に知っていて、実際のクラスを与えれば、ジェネリックスについて文句を言うべきではありません。