ObjectMap extends AbstractMap<String, Object> { @Override public Object remove(Object key) { if (key instanceof String) { Field field = definition.getField((String) key); if (field != null) { Object object = getObject(); try { Object oldValue = field.get(object); field.set(object, getConverter().convert(field.getGenericType(), null)); return oldValue; } catch (IllegalAccessException ex) { throw new IllegalStateException(ex); } } } return extras.remove(key); } ObjectMap();  ObjectMap(Object object); Object getObject(); void setObject(Object object); Converter getConverter(); void setConverter(Converter converter); @Override void clear(); @Override boolean containsKey(Object key); @Override boolean containsValue(Object value); @Override Set<Map.Entry<String, Object>> entrySet(); @Override Object get(Object key); @Override boolean isEmpty(); @Override Set<String> keySet(); @Override Object put(String key, Object value); @Override void putAll(Map<? extends String, ? extends Object> map); @Override Object remove(Object key); @Override int size(); @Override Collection<Object> values();  }
@Test public void remove_backer_get() { ObjRemove obj = new ObjRemove(); ObjectMap objmap = new ObjectMap(obj); objmap.remove("field_pub"); assertEquals(null, obj.field_pub); }