我正在为我正在构建的工具使用一些 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 的一部分。这样的案例还有很多。
可扩展性
看一下MessageDigest
。 javadoc 指定:
这允许其他 java.security.Provider
库为其他算法提供 MessageDigest
实现,而不是 API 最低要求的算法。在 API 级别的限制性 enum
中仅列出默认值会限制可扩展性。
在邮件 session 属性的情况下,允许其他 javax.mail.Provider
实现支持附加/自定义属性也是如此。
关于java - 为什么 Java 类库仍然使用 String 常量代替 enum,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25110186/