Ich überarbeite Code, den ich nicht geschrieben habe, der JavaMail verwendet, und habe ein wenig Schwierigkeiten zu verstehen, warum die JavaMail-API so entwickelt wurde, wie sie ist. Ich habe das Gefühl, wenn ich es verstehe, könnte ich einen besseren Job machen.
Wir rufen:
%Vor%Warum also warnt mich Eclipse, dass dies:
%Vor%ist ein Aufruf an eine statische Methode?
Warum erhalte ich ein Transport-Objekt und stelle spezifische Einstellungen bereit, wenn ich dieses Objekt nicht zum Senden der Nachricht verwenden kann? Wie weiß die Transport-Klasse überhaupt, welche Server- und andere Einstellungen zum Senden der Nachricht verwendet werden? Es funktioniert gut, was kaum zu glauben ist. Was wäre, wenn ich Transportobjekte für zwei verschiedene Server instanziiert hätte? Woher soll es wissen, welchen man benutzen soll?
Im Laufe des Schreibens dieser Frage habe ich entdeckt, dass ich wirklich anrufen sollte:
%Vor%Was ist der Zweck der statischen Transport.send () -Methode? Ist das nur ein schlechtes Design oder gibt es einen Grund dafür?
Transport.send()
ist im Grunde eine Bequemlichkeitsmethode. Ja, wenn Sie Ihre eigene Transport
-Instanz verwalten, rufen Sie sendMessage()
auf.
Ich bin mir nicht sicher, ob ich es für ein schlechtes Design halte, da es häufig nicht wichtig ist, die Details des Sendens und Überwachens des Transports zu verwalten. Öffne die Methode send()
, um zu sehen, was sie für dich tut. Andere Möglichkeiten, diese Methode zu benennen oder zu platzieren, könnten geringfügig besser sein.
Der Javadoc sagt:
Senden ist eine statische Methode, die ihre eigene Verbindung erstellt und verwaltet. Jede Verbindung, die einer Transportinstanz zugeordnet ist, die zum Aufrufen dieser Methode verwendet wird, wird ignoriert und nicht verwendet. Diese Methode sollte nur mit dem Formular Transport.send (msg); aufgerufen werden und sollte niemals mit einer Instanzvariablen aufgerufen werden.
Und ja, wahrscheinlich ist das Design nicht gut
Tags und Links java javamail api-design