3

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

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

一旦文档定义了 Java Mail API 的“标准”属性,就可能存在一种方法来检查它们的正确性并在 IDE 中自动完成它们。

但是,我无法使用 google/documentation 找到这种方式。我也找不到任何关于缺少预定义名称的解释。

那么,有没有办法克服这个问题呢?我是否遗漏了一些明显的东西,使得使用常量的方法不可能/不需要?

4

3 回答 3

4

不,这些属性没有定义的常量。部分原因是这些属性不是完全恒定的——它们由一些恒定的部分组成,但也包括协议的名称。JavaMail 参考实现至少包括 8 个协议,因此每个属性需要有 8 个“常量”。属性名称需要与您使用的协议相匹配;我不知道 IDE 会如何解决这个问题。

于 2013-11-13T20:04:36.843 回答
2

我也在寻找类似的 API。确实,Java 没有为电子邮件常量提供 API,但是我从 apache 中发现了这些电子邮件 API,它们为此提供了EmailConstants类。

于 2015-02-26T07:38:28.790 回答
1

我建议为此创建一个接口:

public interface SessionProperties {
    String AUTH = "mail.smtp.auth";
}

接口使定义和使用名称变得容易(只是implement获取访问权限的接口)。这对于没有静态导入的旧 Java 版本最有用。

请注意,有些人对此不以为然。我仍在使用它的主要原因是代码的简单性:我不必编写所有这些访问修饰符。

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

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

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

  3. 它使示例更易于共享,因为所有信息都在那里。

  4. 人们懒得创建适当的公共 API。

于 2013-11-13T15:22:40.073 回答