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
,这是将字符转换为字节所必需的。另一种方法是将其作为静态方法中的参数传递。两者当然都可以实现。
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
,这是将字符转换为字节所必需的。另一种方法是将其作为静态方法中的参数传递。两者当然都可以实现。