@Override
  public <T> T createStableValue(final Factory<? extends T> provider, final Condition<? super T> validator) {
    final T initial = provider.create();
    assert initial != null;
    StableInvocationHandler<?> handler = new StableInvocationHandler<>(initial, provider, validator);

    Set<Class<?>> intf = new HashSet<>();
    ContainerUtil.addAll(intf, initial.getClass().getInterfaces());
    intf.add(StableElement.class);
    //noinspection unchecked

    return (T)AdvancedProxy.createProxy(initial.getClass().getSuperclass(), intf.toArray(ArrayUtil.EMPTY_CLASS_ARRAY),
                                        handler);
  }
@Override
  public <T> T createStableValue(final Factory<? extends T> provider, final Condition<? super T> validator)