public final <T> T createStableValue(final Factory<T> provider, final Condition<T> validator) { final T initial = provider.create(); assert initial != null; final StableInvocationHandler handler = new StableInvocationHandler<T>(initial, provider, validator); final Set<Class> intf = new HashSet<Class>(); ContainerUtil.addAll(intf, initial.getClass().getInterfaces()); intf.add(StableElement.class); //noinspection unchecked return (T) AdvancedProxy.createProxy( initial.getClass().getSuperclass(), intf.toArray(new Class[intf.size()]), handler); }