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

Why is JavaMail Transport.send() a static method?

我正在修改我没有编写的使用JavaMail的代码,并且在理解为什么按此方式设计JavaMail API时遇到了一些麻烦。 我有一种感觉,如果我理解,我会做得更好。

我们称之为:

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

那么,为什么Eclipse警告我这:

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

是对静态方法的调用?

如果无法使用传输对象发送邮件,为什么要获得该对象并提供特定于它的设置? Transport类甚至如何知道用于发送消息的服务器和其他设置? 它工作正常,这令人难以置信。 如果我为两个不同的服务器实例化了传输对象,该怎么办? 它怎么知道要使用哪个?

在写这个问题的过程中,我发现我应该打电话给:

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

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


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

我不确定我是否认为这是不好的设计,因为您经常不关心管理发送和监视传输的详细信息。 破解send()方法,看看它能为您做什么。 命名或放置此方法的其他方法可能会稍好一些。


Javadoc说:

发送是创建和管理其自己的连接的静态方法。 与用于调用此方法的任何Transport实例关联的任何连接都将被忽略,并且不会使用。 只能使用Transport.send(msg);形式调用此方法,并且永远不要使用实例变量来调用此方法。

是的,可能是设计不好