@Override
  public V get(Object key) {
    checkNotNull(key, NULL_KEY_IS_NOT_ALLOWED);
    initNearCache();
    if (nearCache != null) {
      Object cached = nearCache.get(key);
      if (cached != null) {
        if (cached.equals(NULL_OBJECT)) {
          return null;
        }
        return (V) cached;
      }
    }

    Data keyData = toData(key);
    ClientMessage request = ReplicatedMapGetCodec.encodeRequest(name, keyData);
    ClientMessage response = invoke(request, keyData);

    ReplicatedMapGetCodec.ResponseParameters result =
        ReplicatedMapGetCodec.decodeResponse(response);

    V value = (V) toObject(result.response);
    if (nearCache != null) {
      nearCache.put(key, value);
    }
    return value;
  }
 protected void storeInNearCache(Data key, Data valueData, V value) {
   if (nearCache != null && valueData != null) {
     Object valueToStore = nearCache.selectToSave(value, valueData);
     nearCache.put(key, valueToStore);
   }
 }