2010-02-16 41 views
8

Tôi đang sửa đổi mã mà tôi không viết sử dụng JavaMail và có một chút rắc rối khi hiểu được tại sao API JavaMail được thiết kế theo cách đó. Tôi có cảm giác rằng nếu tôi hiểu, tôi có thể làm tốt hơn.Tại sao JavaMail Transport.send() là một phương thức tĩnh?

Chúng tôi gọi:

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

Vậy tại sao là Eclipse cảnh báo tôi rằng đây:

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

là một cuộc gọi đến một phương pháp tĩnh?

Tại sao tôi nhận được đối tượng Transport và cung cấp các cài đặt cụ thể cho nó nếu tôi không thể sử dụng đối tượng đó để gửi tin nhắn? Lớp Transport thậm chí còn biết máy chủ và các thiết lập khác sử dụng để gửi tin nhắn như thế nào? Nó hoạt động tốt, rất khó tin. Điều gì sẽ xảy ra nếu tôi có các đối tượng Transport instantiated cho hai máy chủ khác nhau; làm thế nào nó sẽ biết cái nào để sử dụng?

Trong quá trình viết câu hỏi này, tôi đã phát hiện ra rằng tôi thực sự nên được gọi:

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

Vì vậy, mục đích của phương pháp tĩnh Transport.send() là gì? Đây có phải là thiết kế kém, hay có lý do nào đó theo cách này?

Trả lời

8

Transport.send() về cơ bản là một phương pháp tiện lợi. Có, nếu bạn đang quản lý cá thể Transport của riêng mình, hãy gọi sendMessage().

Tôi không chắc chắn rằng tôi cho rằng thiết kế này kém, vì thường xuyên bạn không quan tâm đến việc quản lý chi tiết gửi và giám sát phương tiện. Nứt mở phương pháp send() để xem nó làm gì cho bạn. Các cách đặt tên hoặc đặt phương pháp này có thể tốt hơn một chút.

5

Các javadoc nói:

Gửi là một phương pháp tĩnh tạo ra và quản lý kết nối riêng của mình. Bất kỳ kết nối nào được kết hợp với bất kỳ cá thể Transport nào được sử dụng để gọi phương thức này đều bị bỏ qua và không được sử dụng. Phương thức này chỉ nên được gọi bằng cách sử dụng biểu mẫu Transport.send (msg) ;, và không bao giờ được gọi bằng cách sử dụng một biến mẫu.

Và có lẽ, việc thiết kế là không tốt

Các vấn đề liên quan