Почему является JavaMail Transport.send () статическим методом?

Я пересматриваю код, я не записал, что использует JavaMail, и имеющий немного проблемы, понимающей, почему JavaMail API разработан путем, это. У меня есть чувство, что, если я понял, я мог бы делать лучшее задание.

Мы звоним:

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

Итак, почему Eclipse, предупреждающий меня что это:

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

вызов к статическому методу?

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

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

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

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

8
задан George Stocker 24 May 2010 в 12:39
поделиться

2 ответа

Я думаю, что это портативная реализация простой формулы:

#include <limits.h>
#include <math.h>
#include <stdio.h>

int main(void) {
    int i;
    unsigned int values[] = {10, 257, 67898, 140000, INT_MAX, INT_MIN};

    for ( i = 0; i < sizeof(values)/sizeof(values[0]); ++i) {
        printf("%d needs %.0f bytes\n",
                values[i],
                1.0 + floor(log(values[i]) / (M_LN2 * CHAR_BIT))
              );
    }
    return 0;
}

Вывод:

10 needs 1 bytes
257 needs 2 bytes
67898 needs 3 bytes
140000 needs 3 bytes
2147483647 needs 4 bytes
-2147483648 needs 4 bytes

Зависит ли и насколько отсутствие скорости и необходимость связывания плавающих библиотек точки от ваших потребностей.

-121--1466487-

Да, по большей части (особенно в отношении Windows Forms) .NET CF является подмножеством стандартной платформы .NET Framework.

... другие ограничения и избегайте классов и методов, не поддерживаемых .NET Compact...

Это основная сложная часть. .NET CF не поддерживает довольно много вещей в рамках.

Существует несколько скрытых классов в структуре, поддерживаемых только на CF, таких как классы IrDA в сети, но в остальном все в .NET CF поддерживается в стандартном дистрибутиве.

Дополнительные сведения см. в разделе «Различия с .NET Framework» на MSDN.

-121--4780028-

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

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

8
ответ дан 5 December 2019 в 12:57
поделиться

В документации javadoc говорится:

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

И да, наверное, дизайн плохой

5
ответ дан 5 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: