Java Mail标准属性是否有任何常量? ide /编译器有没有其他方法来检查拼写?

时间:2013-11-13 14:58:30

标签: java javamail

我发现的所有Java Mail使用示例都为Session设置了属性名称定义为简单字符串的属性。例如:

   props.put("mail.smtp.auth", "true");
   props.put("mail.smtp.starttls.enable", "true");

只要文档为Java Mail API定义了“标准”属性,就有可能检查它们的正确性并在IDE中自动完成它们。

但是,我无法使用谷歌/文档找到这种方式。我也找不到任何有关预定义名称缺失的解释。

那么,有什么办法可以解决这个问题吗?我是否遗漏了一些显而易见的事情,使得常量不可能/不需要?

3 个答案:

答案 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。我仍在使用它的主要原因是代码的简单性:我不必编写所有这些访问修饰符。

根据我的经验,为什么许多框架忘记为这样的事情定义全局常量有几个原因:

  1. 误解了数据隐藏(常量在代码中的某个地方,但私有 - 很棒,它们是公共API的一部分,但私有!做得好......)

  2. 人们喜欢剪切和粘贴代码。这就是他们的开始,他们总是回归它。

  3. 由于所有信息都在那里,因此更容易分享示例。

  4. 人们懒得创建一个合适的公共API。