ski*_*ppy 8 java api-design jakarta-mail
我正在修改我没写过的使用JavaMail的代码,并且在理解为什么JavaMail API的设计方式有点麻烦.我觉得,如果我理解,我可以做得更好.
我们称之为:
transport = session.getTransport("smtp");
transport.connect(hostName, port, user, password);
Run Code Online (Sandbox Code Playgroud)
那么为什么Eclipse会警告我:
transport.send(message, message.getAllRecipients());
Run Code Online (Sandbox Code Playgroud)
是对静态方法的调用?
如果我无法使用该对象发送消息,为什么我会获取Transport对象并提供特定于它的设置?Transport类如何知道用于发送消息的服务器和其他设置?它工作正常,很难相信.如果我为两个不同的服务器实例化了Transport对象,该怎么办?怎么知道使用哪一个?
在写这个问题的过程中,我发现我应该真的在呼唤:
transport.sendMessage(message, message.getAllRecipients());
Run Code Online (Sandbox Code Playgroud)
那么静态Transport.send()方法的目的是什么?这只是糟糕的设计,还是有这样的原因?
Transport.send()基本上是一种方便的方法.是的,如果您正在管理自己的Transport实例,请致电sendMessage().
我不确定我认为它设计不好,因为经常你不关心管理传输和监控传输的细节.破解send()方法,看看它为你做了什么.命名或放置此方法的其他方法可能略微更好.
javadoc说:
Send是一种静态方法,可以创建和管理自己的连接.与用于调用此方法的任何Transport实例关联的任何连接都将被忽略并且不会使用.只应使用表单Transport.send(msg);调用此方法,并且永远不应使用实例变量调用此方法.
也许是的,设计并不好
| 归档时间: |
|
| 查看次数: |
8239 次 |
| 最近记录: |