2010-02-16 56 views
8

我正在修改我没有编写使用JavaMail的代码,并且在理解为什么JavaMail API的设计方式方面有点麻烦。我有这样的感觉,如果我明白了,我可以做得更好。为什么JavaMail Transport.send()是一个静态方法?

我们呼吁:

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

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

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

是一个静态方法的调用?

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

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

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

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

回答

8

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

我不确定我认为它是不好的设计,因为你经常不关心管理发送和监控传输的细节。破解打开send()方法,看看它为你做了什么。命名或放置这种方法的其他方式可能稍好一些。

5

的Javadoc说:

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

是的可能,设计不好

相关问题