/** Returns the object that is stored for the given type (or null if none is stored). */ @SuppressWarnings("unchecked") public <T extends Serializable> T getValue(Class<T> clazz) throws StorageException { byte[] bytes = store.getWithString(clazz.getName()); if (bytes == null) { return null; } Object value; try { value = SerializationUtils.deserializeFromByteArray( bytes, Thread.currentThread().getContextClassLoader()); } catch (ClassNotFoundException e) { throw new StorageException(e); } catch (IOException e) { throw new StorageException(e); } if (!clazz.isInstance(value)) { throw new StorageException( "Storage system returned object of unexpected type: " + value.getClass()); } return (T) value; }
/** * Sets a value using an explicit class. This is useful if the value used is a subclass, but the * more general type should be used for storing. */ public <S extends Serializable, T extends S> void setValue(T value, Class<S> explicitClass) throws StorageException { try { store.putWithString(explicitClass.getName(), SerializationUtils.serializeToByteArray(value)); } catch (IOException e) { throw new StorageException(e); } }