### Question:
LazyModel implements IModel<T>, IObjectClassAwareModel<T>,
		IObjectTypeAwareModel<T>, IPropertyReflectionAwareModel<T> { public IModel<T> loadableDetachable() { return new LoadableDetachableWrapper(); } LazyModel(Object target, Object stack); IModel<T> loadableDetachable(); @Override Class<T> getObjectClass(); Type getObjectType(); @Override Field getPropertyField(); @Override Method getPropertyGetter(); @Override Method getPropertySetter(); @Override void detach(); T getObject(); void setObject(T result); Object getTarget(); LazyModel<T> bind(Object target); @Override String toString(); String getPath(); static T from(T target); static T from(Class<T> targetType); static T from(IModel<T> target, Class<T> type); static T from(IModel<T> target); static LazyModel<R> model(R result); static String path(R result); static IMethodResolver methodResolver; }### Answer:
@Test public void loadableDetachable() { final int[] got = new int[1]; IModel<String> string = new IModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { got[0]++; return null; } }; IModel<String> model = model(from(string)).loadableDetachable(); model.getObject(); model.getObject(); assertEquals(1, got[0]); model.detach(); model.getObject(); model.getObject(); assertEquals(2, got[0]); }