Question

Je suis le code révision je n'ai pas écrit cela utilise JavaMail, et ayant un peu de mal à comprendre pourquoi l'API JavaMail est conçu comme ça. J'ai le sentiment que si je comprenais, je pouvais faire un meilleur travail.

Nous appelons:

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

Alors, pourquoi me avertit Eclipse que ceci:

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

est un appel à une méthode statique?

Pourquoi suis-je recevoir un objet de transport et de fournir des paramètres qui lui sont propres si je ne peux pas utiliser cet objet pour envoyer le message? Comment la classe de transport savent même pas ce serveur et d'autres paramètres à utiliser pour envoyer le message? Il fonctionne très bien, ce qui est difficile à croire. Que faire si j'avais instancié objets de transport pour deux serveurs différents; comment serait-il savoir lequel utiliser?

Au cours de la rédaction de cette question, je l'ai découvert que je devrais vraiment Vocation:

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

Alors, quel est l'objectif de la méthode Transport.send () statique? Est-ce que la conception pauvre, ou est-il une raison pour laquelle il est ainsi?

Était-ce utile?

La solution

Transport.send() est essentiellement une méthode pratique. Oui, si vous gérez votre propre instance de Transport, appelez sendMessage().

Je ne suis pas sûr que je considère une mauvaise conception, puisque souvent vous ne se soucient pas de gérer les détails de l'envoi et le suivi des transports. Entrouvrir la méthode send() pour voir ce qu'il fait pour vous. D'autres façons de nommer ou de placer cette méthode pourrait être un peu mieux.

Autres conseils

Le javadoc dit:

Envoyer est une méthode statique qui crée et gère sa propre connexion. Toute connexion associée à une instance de transport utilisé pour invoquer cette méthode est ignorée et non utilisée. Cette méthode ne doit être invoquée en utilisant le formulaire Transport.send (msg) ;, et ne doit jamais être invoqué en utilisant une variable d'instance.

Et oui probablement, la conception est pas bon

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top