2010-02-16 63 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);的形式調用此方法,並且不應使用實例變量調用此方法。

是的可能,設計不好

相關問題