9

JavaMail を使用する、私が書いていないコードを修正していて、JavaMail API がそのように設計されている理由を理解するのに少し苦労しています。理解できれば、もっといい仕事ができる気がします。

私たちは次のように呼びます:

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

では、Eclipse が次のように警告するのはなぜですか。

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

静的メソッドの呼び出しですか?

Transport オブジェクトを取得して、そのオブジェクトを使用してメッセージを送信できないのに、そのオブジェクトに固有の設定を提供するのはなぜですか? Transport クラスは、メッセージの送信に使用するサーバーやその他の設定をどのように認識しているのでしょうか? 信じられないほどうまく機能しています。2 つの異なるサーバーのトランスポート オブジェクトをインスタンス化した場合はどうなるでしょうか。どちらを使用するかをどのように知るのでしょうか?

この質問を書いている過程で、私は本当に呼び出す必要があることを発見しました:

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

では、静的な Transport.send() メソッドの目的は何でしょうか? これはデザインが悪いだけですか、それとも理由がありますか?

4

2 に答える 2

5

javadoc は次のように述べています。

Send は、独自の接続を作成および管理する静的メソッドです。このメソッドを呼び出すために使用される Transport インスタンスに関連付けられた接続はすべて無視され、使用されません。このメソッドは、Transport.send(msg); の形式を使用してのみ呼び出す必要があり、インスタンス変数を使用して呼び出すことはできません。

そして、おそらく、デザインは良くありません

于 2010-02-16T16:49:06.120 に答える