LogString.java
package space.sunqian.common.base.logging;
import space.sunqian.annotations.Immutable;
import space.sunqian.annotations.Nonnull;
import java.util.function.Supplier;
/**
* LogString is used to encapsulate a {@link Supplier}, and {@link Supplier#get()} will only be called when
* {@link #toString()} of {@link LogString} is called. This class is typically used to reduce the high overhead
* concatenation operations for log printing.
*
* @author sunqian
*/
@Immutable
public final class LogString {
/**
* Returns a new instance of {@link LogString} with the specified {@link Supplier}.
*
* @param supplier the specified {@link Supplier}
* @return a new instance of {@link LogString} with the specified {@link Supplier}
*/
public static @Nonnull LogString of(@Nonnull Supplier<@Nonnull String> supplier) {
return new LogString(supplier);
}
private final @Nonnull Supplier<@Nonnull String> supplier;
private LogString(@Nonnull Supplier<@Nonnull String> supplier) {
this.supplier = supplier;
}
@Override
public @Nonnull String toString() {
return supplier.get();
}
}