java - 为什么 JavaMail Transport.send() 是静态方法?

标签 java jakarta-mail api-design

我正在修改我没有编写的使用 JavaMail 的代码,并且在理解为什么 JavaMail API 是这样设计的方面遇到了一些困难。我有一种感觉,如果我理解了,我可以做得更好。

我们调用:

transport = session.getTransport("smtp");
transport.connect(hostName, port, user, password);

那么为什么 Eclipse 警告我:

transport.send(message, message.getAllRecipients());

是对静态方法的调用吗?

如果我不能使用该对象发送消息,为什么我要获取一个传输对象并提供特定于它的设置? Transport 类如何知道使用什么服务器和其他设置来发送消息?它工作正常,这很难相信。如果我为两个不同的服务器实例化了传输对象会怎样?它怎么知道要使用哪一个?

在写这个问题的过程中,我发现我真的应该调用:

transport.sendMessage(message, message.getAllRecipients());

那么静态 Transport.send() 方法的目的是什么?这只是糟糕的设计,还是有这样的原因?

最佳答案

Transport.send() 基本上是一种方便的方法。是的,如果您正在管理自己的 Transport 实例,请调用 sendMessage()

我不确定我是否认为它是糟糕的设计,因为您通常不关心管理发送和监控传输的细节。打开 send() 方法,看看它能为您做什么。其他命名或放置此方法的方式可能会稍微好一些。

关于java - 为什么 JavaMail Transport.send() 是静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2274501/

相关文章:

uri - 如何最好地构建 RESTful API 端点

java - 如何使用 Java 中的 2 个 JtextField 将英里转换为公里,反之亦然?

java - 基于共享首选项的 LRU 缓存

java - 如何通过javamail api检查我的hotmail帐户中有多少条未读邮件?

JavaMail Yandex 发件人

json - 无结果的 REST 搜索的 HTTP 状态代码

java - 使用jlink命令创建运行时镜像报告 "Null charset name"

JAVA时序冒泡排序和快速排序算法

java - 如何正确地将javamail和激活依赖项添加到ant build.xml文件中?

python - 如何迭代列表列表,同时将列表中的每个值传递到 API 并在每个列表列表之后暂停?