2010-02-16 19 views
8

Sto revisionando il codice che non ho scritto che utilizza JavaMail e avendo un po 'di problemi a capire perché l'API JavaMail è progettata così com'è. Ho la sensazione che se capissi, potrei fare un lavoro migliore.Perché JavaMail Transport.send() è un metodo statico?

Noi chiamiamo:

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

Allora perché mi avverte che questo Eclipse:

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

è una chiamata ad un metodo statico?

Perché ottengo un oggetto Transport e fornisco impostazioni specifiche se non riesco a utilizzare quell'oggetto per inviare il messaggio? In che modo la classe Transport sa quali server e altre impostazioni utilizzare per inviare il messaggio? Funziona bene, è difficile da credere. Cosa succede se ho creato oggetti di trasporto istanziati per due server diversi; come saprebbe quale usare?

Nel corso della stesura di questa domanda, ho scoperto che in realtà dovrebbe essere chiamando:

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

Allora, qual è lo scopo del metodo statico Transport.send()? È solo un design scadente, o c'è una ragione per cui è così?

risposta

8

Transport.send() è fondamentalmente un metodo comodo. Sì, se gestisci la tua istanza Transport, chiama sendMessage().

Non sono sicuro di considerarlo un cattivo design, poiché spesso non ti interessa gestire i dettagli di invio e monitoraggio del trasporto. Apri il metodo send() per vedere che cosa fa per te. Altri modi di nominare o posizionare questo metodo potrebbero essere leggermente migliori.

5

JavaDoc dice:

Send è un metodo statico che crea e gestisce la propria connessione. Qualsiasi connessione associata a qualsiasi istanza di trasporto utilizzata per richiamare questo metodo viene ignorata e non utilizzata. Questo metodo dovrebbe essere invocato solo utilizzando il modulo Transport.send (msg); e non dovrebbe mai essere invocato utilizzando una variabile di istanza.

E sì, probabilmente, il design non è buona

Problemi correlati