@Nullable
    @Contract(value = "null, _, _ -> null; !null, _, _ -> !null", pure = true)
    public static <T> TtlCallable<T> get(@Nullable Callable<T> callable, boolean releaseTtlValueReferenceAfterCall, boolean idempotent) {
        if (callable == null) return null;

        if (callable instanceof TtlEnhanced) {
            // avoid redundant decoration, and ensure idempotency
            if (idempotent) return (TtlCallable<T>) callable;
            else throw new IllegalStateException("Already TtlCallable!");
        }
        return new TtlCallable<>(callable, releaseTtlValueReferenceAfterCall);
    }
Factory method, wrap input {@link Callable} to {@link TtlCallable}.
<p>
This method is idempotent.

@param callable                          input {@link Callable}
@param releaseTtlValueReferenceAfterCall release TTL value reference after run, avoid memory leak even if {@link TtlRunnable} is referred.
@param idempotent                        is idempotent or not. {@code true} will cover up bugs! <b>DO NOT</b> set, only when you know why.
@return Wrapped {@link Callable}
ttl2-compatible/src/main/java/com/alibaba/ttl/TtlCallable.java