इसे काम करने के लिए निम्नलिखित विकल्प हैं।
उपवर्ग द्वारा
यदि आप हर बार कंक्रीट जेनेरिक प्रकार के साथ उपवर्ग करते हैं, तो यह काम करता है:
public class MyClassCacheEntity extends CacheEntity<MyClass> {}
BsonDocument
. का उपयोग करके + जैक्सन
सबक्लासिंग से बचने के लिए आप मनमानी वस्तुओं को BsonDocument
. के रूप में स्टोर करने का प्रयास कर सकते हैं -s और जैक्सन का उपयोग करके उन्हें क्रमबद्ध/deserialize करें:
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
का उपयोग करके भी करने का प्रयास कर सकते हैं। जिसे आप या तो वर्तमान मोंगो कोडेक्स रजिस्ट्री से बना या निकाल सकते हैं। यदि आप पहले से जानते हैं और इसे वास्तविक वर्ग देते हैं, तो इसे जेनरिक के बारे में शिकायत नहीं करनी चाहिए।