vertx-gaia/vertx-ams/src/main/java/io/horizon/util/HUt.java
package io.horizon.util;
import java.util.Arrays;
import java.util.Objects;
import java.util.ResourceBundle;
import java.util.concurrent.ConcurrentMap;
import java.util.function.Supplier;
/**
* High Metadata Service 高阶元数据工具类
* 1)动参版本
* 2)对象版本
* 上述两个版本直接在 HH 类中铺开写逻辑
* 包域中只包含基础逻辑,没有其他内容
*
* @author lang : 2023/4/27
*/
public class HUt extends _Value {
/*
* 构造函数只能被子类调用,不可以在其他地方调用,所以此处是工具类的重新设计,原理
* 1. Java 中的静态方法可以从父类继承,但是不可以从接口初获得
* 2. 虽然继承之后子类定义的方法只是隐藏了父类的,但不会出现Overwrite
* 3. 但从代码去重上是一个非常好的策略
*
* 父类:protected 的默认构造函数 + 静态类
* 子类:private 的构造函数 + final 不可继承类
* 这种类最终会导致二者合并形成统一方法区间
*/
protected HUt() {
}
// ---------------- 格式化函数
/**
* 使用 MessageFormat 进行格式化,参数
* {0} {1} {2}
* 使用 Slf4j 进行格式化,参数
* {} {} {}
*
* @param pattern 格式化模板
* @param args 参数
*
* @return 格式化后的字符串
*/
public static String fromMessage(final String pattern, final Object... args) {
return HFormat.fromMessage(pattern, args);
}
/**
* 由于 {@link ResourceBundle} 本身是支持国际化资源绑定的,所以此处直接从 bundle 中提取
* 资源键为 key 部分的字符串,然后使用 {@link HUt#fromMessage} 进行格式化
*
* @param bundle 资源绑定对象
* @param key 资源键
* @param args 参数
*
* @return 格式化后的字符串
*/
public static String fromResource(final ResourceBundle bundle,
final String key, final Object... args) {
return HFormat.fromResource(bundle, key, args);
}
/**
* 加粗版本的格式化,用于日志部分的专用处理
*
* @param pattern 格式化模板
* @param args 参数
*
* @return 格式化后的字符串
*/
public static String fromMessageB(final String pattern, final Object... args) {
return HFormat.fromMessageB(pattern, args);
}
/**
* 异常信息的格式化,用于各种异常信息模板化输出专用处理,该格式化函数是根据
* 异常构造参数调用,所以通常在抽象异常的构造函数中使用而不能在其他位置直接
* 使用,其他位置时候格式化之后的结果可能有问题
*
* @param pattern 格式化模板
* @param clazz 触发异常调用类
* @param code 异常代码
* @param args 参数
*
* @return 格式化后的字符串
*/
public static String fromError(final String pattern, final Class<?> clazz,
final int code, final Object... args) {
return HError.fromError(pattern, clazz, code, args);
}
/**
* 异常信息的格式化,用于各种异常信息模板化输出专用处理,该格式化函数是根据
* 异常 code 从文件中提取,
* vertx zero 中直接从 vertx-readable.yml 中提取
*
* @param code 异常代码
*
* @return 格式化后的字符串
*/
public static String fromReadable(final int code, final Object... args) {
return HError.fromReadable(code, args);
}
// ---------------- 池化函数
public static <V> V poolThread(final ConcurrentMap<String, V> pool, final Supplier<V> poolFn, final String key) {
return HPool.poolThread(pool, poolFn, key);
}
public static <V> V poolThread(final ConcurrentMap<String, V> pool, final Supplier<V> poolFn) {
return HPool.poolThread(pool, poolFn, null);
}
public static <K, V> V pool(final ConcurrentMap<K, V> pool, final K key, final Supplier<V> poolFn) {
return HPool.pool(pool, key, poolFn);
}
// ---------------- 转换函数:to - 转成 / from - 转入
// ---------------- Jvm强化函数
public static void requireNonNull(final Object... args) {
Arrays.stream(args).forEach(Objects::requireNonNull);
}
}