我正在为我正在构建的工具使用一些 Java 类,例如 javax.Mail.Session MessageDigest

我注意到很难为其分配属性,因为它们为此使用了String常量。

例如,对于 Session 对象,您必须在 String 实例中分配 Property 键值对,然后用于创建 Session 。因此,如果您希望 session 记录调试消息,请在 "smtp.mail.debug" 实例中分配 "true"Property 。同样,如果您希望 MessageDigest 使用 SHA ,请将 MessageDigest 实例创建为 MessageDigest.getInstance("SHA")

如果说我想使用 MessageDigest/MD5 等实现 RC4,或者向我的 Session 对象添加另一个属性,我还没有弄清楚该怎么做以及从哪里获取信息。

如果这些各自的类公开公共(public)枚举来分配属性,那不是真的更好吗?

至少可以为程序员节省大量的搜索时间。

最佳答案

我可以看到两个主要原因:

向后兼容性

在 Java 1.5 中引入 enum 之前,您提供的两个示例已经是 API 的一部分。这样的案例还有很多。

可扩展性

看一下MessageDigestjavadoc 指定:



这允许其他 java.security.Provider 库为其他算法提供 MessageDigest 实现,而不是 API 最低要求的算法。在 API 级别的限制性 enum 中仅列出默认值会限制可扩展性。

在邮件 session 属性的情况下,允许其他 javax.mail.Provider 实现支持附加/自定义属性也是如此。

关于java - 为什么 Java 类库仍然使用 String 常量代替 enum,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25110186/

10-10 20:05