Apache 通用编解码器 - 为什么 Hex.encode() 不是静态的?

Apache common codec - Why Hex.encode() isn't static?

Base64 有许多静态编码方法将 byte[] 返回为

Base64.encodeBase64(stringToEncode.getBytes(StandardCharsets.UTF_8.name()));

MessageDigest使用静态getInstance到encode/digest

但是Hex doesn't, it have only instance method encode需要创建一个实例

new Hex().encode(stringToEncode.getBytes(StandardCharsets.UTF_8.name()));

是否有我需要创建实例来获取字节数组的原因,或者有更好的方法吗?

我目前认为添加 getBytes() 不是一个好主意,例如

Hex.encodeHexString(stringToEncode).getBytes()

没有可供您使用的静态方法,但 class 是线程安全的,因此您可以创建它的一个实例并保留它。

这是一些 class 的常见习语,例如 ObjectMapper 或格式化对象。当然,它们通常具有比 Hex 需要更多的内部状态,所以这可能是设计疏忽。

我认为这些是实例方法的原因是构造函数采用 Charset,这是将字符转换为字节所必需的。另一种方法是将其作为静态方法中的参数传递。两者当然都可以实现。