我发现的所有Java Mail使用示例都为Session
设置了属性名称定义为简单字符串的属性。例如:
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
只要文档为Java Mail API定义了“标准”属性,就有可能检查它们的正确性并在IDE中自动完成它们。
但是,我无法使用谷歌/文档找到这种方式。我也找不到任何有关预定义名称缺失的解释。
那么,有什么办法可以解决这个问题吗?我是否遗漏了一些显而易见的事情,使得常量不可能/不需要?
答案 0 :(得分:3)
不,这些属性没有定义的常量。部分原因是这些属性不是完全恒定的 - 它们由一些常量部分组成,但也包括协议的名称。 JavaMail参考实现包括至少8个协议,因此每个属性需要8个“常量”。属性名称需要与您正在使用的协议相匹配;我不知道IDE会如何解决这个问题。
答案 1 :(得分:2)
我也在寻找类似的API。确实,Java没有为电子邮件常量提供API,但是我从apache那里得到了这些电子邮件API,它为此用途提供了EmailConstants类。
答案 2 :(得分:1)
我建议为此创建一个界面:
public interface SessionProperties {
String AUTH = "mail.smtp.auth";
}
界面可以轻松定义和使用名称(只需implement
接口即可访问)。这对于没有静态导入的旧Java版本最有用。
Note that some people frown upon this。我仍在使用它的主要原因是代码的简单性:我不必编写所有这些访问修饰符。
根据我的经验,为什么许多框架忘记为这样的事情定义全局常量有几个原因:
误解了数据隐藏(常量在代码中的某个地方,但私有 - 很棒,它们是公共API的一部分,但私有!做得好......)
人们喜欢剪切和粘贴代码。这就是他们的开始,他们总是回归它。
由于所有信息都在那里,因此更容易分享示例。
人们懒得创建一个合适的公共API。