2010-02-16 4 views
8

Я пересматриваю код. Я не писал, что использует JavaMail, и немного затруднился понять, почему API JavaMail разработан так, как он есть. У меня такое чувство, что, если я понял, я мог бы работать лучше.Почему JavaMail Transport.send() статический метод?

Мы называем:

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

Так почему Затмение предупреждает меня, что это:

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

является вызовом статического метода?

Почему я получаю объект транспорта и предоставляю параметры, которые являются конкретными для него, если я не могу использовать этот объект для отправки сообщения? Как класс транспорта даже знает, какие серверные и другие параметры использовать для отправки сообщения? Он работает нормально, чему трудно поверить. Что делать, если я создал объекты транспорта для двух разных серверов; как он узнает, какой из них использовать?

В процессе написания этого вопроса, я обнаружил, что я действительно должен называть:

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

Так что цель метода статического Transport.send()? Это просто плохой дизайн, или есть причина, по которой это происходит?

ответ

8

Transport.send() в основном удобный метод. Да, если вы управляете своим собственным экземпляром Transport, звоните sendMessage().

Я не уверен, что считаю это плохой дизайн, так как часто вы не можете управлять деталями отправки и мониторинга транспорта. Crack откройте метод send(), чтобы увидеть, что он делает для вас. Другие способы именования или размещения этого метода могут быть немного лучше.

5

Javadoc говорит:

Отправить статический метод, который создает и поддерживает связь. Любое соединение, связанное с любым экземпляром транспорта, используемым для вызова этого метода, игнорируется и не используется. Этот метод следует вызывать только с помощью формы Transport.send (msg) ;, и никогда не должен вызываться с использованием переменной экземпляра.

И да, наверное, дизайн не является хорошим

Смежные вопросы