Der er følgende muligheder for at få det til at fungere.
Ved underklassificering
Hvis du underklasser med konkret generisk type hver gang, virker det:
public class MyClassCacheEntity extends CacheEntity<MyClass> {}
Ved at bruge BsonDocument
+ Jackson
For at undgå underklassificering kan du prøve at gemme vilkårlige objekter som BsonDocument
-s og serialiser/deserialiser dem ved hjælp af 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);
}
}
Dette virker indtil du undgår getters/setters-konventionen for withValue()
og value()
metoder, ellers begynder Mongo at klage over det samme generiske problem.
Samme med ren bson
Jeg tror, du kan også prøve at gøre det på samme måde som ovenfor ved at bruge org.bson.codecs.pojo.PojoCodec
som du enten kan oprette eller udtrække fra det aktuelle mongo-codecs-register. Hvis du ved det på forhånd og giver det den rigtige klasse, bør den ikke klage over generiske lægemidler.