class ThrottlingBeanSnapshotProxy implements InvocationHandler {

    static <I, T extends I> I newThrottlingBeanSnapshotProxy( Class<I> iface, T target, long updateInterval, Clock clock )
    {
        if ( updateInterval == 0 )
        {
            return target;
        }
        checkArgument( iface.isInterface(), "%s is not an interface", iface );
        requirePositive( updateInterval );
        final ThrottlingBeanSnapshotProxy proxy = new ThrottlingBeanSnapshotProxy( iface, target, updateInterval, clock );
        return iface.cast( newProxyInstance( iface.getClassLoader(), new Class[] {iface}, proxy ) );
    }

    private <T> ThrottlingBeanSnapshotProxy( Class<T> iface, T target, long updateInterval, Clock clock );

}