LogKit.java

package space.sunqian.fs.base.logging;

import space.sunqian.annotation.Nonnull;

import java.util.function.Supplier;

/**
 * Utilities for logging.
 *
 * @author sunqian
 */
public class LogKit {

    /**
     * Returns an object that encapsulates a specified {@link Supplier}, and {@link Supplier#get()} will only be called
     * when {@link #toString()} of the returned object is called. This class is typically used to reduce the high
     * overhead concatenation operations for log printing.
     *
     * @param supplier the specified {@link Supplier}
     * @return an object that encapsulates the specified {@link Supplier}
     */
    public static @Nonnull Object lazyToString(@Nonnull Supplier<@Nonnull String> supplier) {
        return new LazyToString(supplier);
    }

    private static final class LazyToString {

        private final @Nonnull Supplier<@Nonnull String> supplier;

        private LazyToString(@Nonnull Supplier<@Nonnull String> supplier) {
            this.supplier = supplier;
        }

        @Override
        public @Nonnull String toString() {
            return supplier.get();
        }
    }

    private LogKit() {
    }
}