なぜJavaMailのTransport.send()静的メソッドとは?
-
20-09-2019 - |
質問
私はそれがJavaMailのを使用して書き込み、少し問題のJavaMail APIは、それがあるように設計されている理由を理解を持っていなかったコードを修正しています。私は理解している場合、私はより良い仕事をしていることができることを感じている。
私たちは、呼び出します:
transport = session.getTransport("smtp");
transport.connect(hostName, port, user, password);
なぜEclipseはこのことを私に警告しています
transport.send(message, message.getAllRecipients());
静的メソッドの呼び出しているのですか?
なぜTransportオブジェクトを取得し、私がメッセージを送信するために、そのオブジェクトを使用できない場合は、それに固有の設定を提供するのですか?どのようにトランスポートクラスでも、サーバや他の設定は、メッセージを送信するために使用するものを知っていますか?信じがたいである、正常に動作しています。私は2台の異なるサーバーのトランスポート・オブジェクトをインスタンス化していた場合。それはどのように使用するかを知っているだろう?
この質問を書くの過程で、私は私が実際に呼び出すべきであることを発見しました
transport.sendMessage(message, message.getAllRecipients());
だから、静的Transport.send()メソッドの目的は何ですか?このちょうど貧しい設計である、またはそれがこのようである理由があるのでしょうか?
解決
Transport.send()
は、基本的には便利な方法です。はい、あなたがあなた自身のTransport
インスタンスを管理している場合は、sendMessage()
を呼び出します。
私は頻繁にあなたが送信し、輸送の監視の詳細を管理するために気にしないので、私は、それ悪いデザインを検討わかりません。それはあなたのために何を見るためにsend()
方法を開いてクラック。このメソッドに名前を付けるか、配置する他の方法は、わずかに良いかもしれません。
他のヒント
のjavadocは言う:
の送信作成し、独自の接続を管理する静的メソッドです。このメソッドを呼び出すために使用される任意のトランスポート・インスタンスに関連付けられた任意の接続は無視され、使用されません。このメソッドは、フォームTransport.send(MSG)を使用して起動する必要があります;,およびインスタンス変数を使用して呼び出されるべきではありません。の
そして、はい、おそらく、デザインが良くありません。