Я пересматриваю код, я не записал, что использует 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 () метод? Это - просто плохой дизайн, или существует ли причина, это - этот путь?
Я думаю, что это портативная реализация простой формулы:
#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 ()
, чтобы узнать, что он делает для вас. Другие способы именования или размещения этого метода могут быть несколько лучше.
В документации javadoc говорится:
Send - это статический метод, который создает собственное соединение и управляет им. Любое соединение, связанное с любым экземпляром транспорта, используемым для вызова этого метода, игнорируется и не используется. Этот метод следует вызывать только с использованием формы Transport.send (msg) ;, и никогда не следует вызывать с использованием переменной экземпляра.
И да, наверное, дизайн плохой