Tại sao các lớp học InetAddress
, Inet4Address
và Inet6Address
không có nhà thầu có thể nhìn thấy?Tại sao các lớp Inet * Address không có các hàm tạo hiển thị?
Trả lời
Vì đây là lớp nhà máy. Sử dụng các phương thức tĩnh để trả về một cá thể nhà máy có ý nghĩa khi có một số lượng nhỏ các tình huống mà bạn muốn tạo một đối tượng như vậy. Vì vậy, thay vì quá tải nhà xây dựng đến điểm mà bạn sẽ phải nhớ tất cả các loại kết hợp các đối số kỳ lạ để sử dụng cho từng tình huống nhất định, nó chỉ cung cấp cho bạn một phương thức (hy vọng được đặt tên) cho mỗi tình huống.
Trong trường hợp này, bạn có thể tạo một đối tượng với một trong số:
getLocalHost()
, nhận được địa chỉ của riêng bạn;getByName()
, nhận địa chỉ "chính" cho trang web; hoặcgetAllByName()
, nhận danh sách địa chỉ.
Đây không phải là một danh sách đầy đủ, xem here để biết thêm trong số họ, tìm kiếm trang đó cho:
Methods in java.net that return InetAddress
Bởi vì chúng không có nghĩa là được khởi tạo trực tiếp (và thực tế đây là một mẫu hữu ích cần biết). Thay vào đó, bạn có nghĩa là sử dụng các phương thức "nhà máy" khác nhau được API cung cấp để có được một cá thể. Kiểm tra tài liệu:
http://docs.oracle.com/javase/1.5.0/docs/api/java/net/InetAddress.html
Đặc biệt, chú ý đến các getBy...()
phương pháp tĩnh.
Inet4Address
và Inet6Address
có nhà thầu mặc định mà chỉ gói có thể nhìn thấy, và do đó có thể thấy InetAddress
nó.
Lý do tại sao InetAddress
không có một constructor là vì InetAddress
là một Flyweight pattern đó cho thấy Factory methods để lấy liên quan InetAddress
subclassed dựa trên địa chỉ được cung cấp.
- 1. Tại sao JSON.stringify không hiển thị các thuộc tính đối tượng là các hàm?
- 2. Tại sao hình ảnh Tkinter không hiển thị nếu được tạo trong một hàm?
- 3. Tại sao tôi không thể thực thi các lớp dẫn xuất để có các hàm tạo tham số?
- 4. Tại sao các tệp được tạo trong git bash không hiển thị trong Windows explorer?
- 5. Tại sao PHP không có hàm tạo mặc định?
- 6. tại sao $ address-> hasCouponCode() luôn trả về null?
- 7. Tại sao các lớp tĩnh không có các phương thức và biến không tĩnh?
- 8. Eclipse có hiển thị danh sách các lớp mở rộng lớp hiện tại
- 9. Các lớp kiểm tra JUnit không hiển thị trong JMeter
- 10. Tại sao không có khái niệm "const-correctness" cho các hàm thành viên tĩnh của lớp?
- 11. Tại sao các biến thành viên được khởi tạo trong các hàm tạo?
- 12. Mã trong hàm tạo có thêm vào mã trong các hàm tạo lớp con không?
- 13. Tại sao hàm tạo EnumMap cần đối số lớp?
- 14. Tại sao không có trường hợp Hiển thị cho các chức năng?
- 15. tại sao hàm tạo mặc định không có mặt cho một lớp chứa các thành viên dữ liệu const
- 16. Tại sao các sự kiện không kích hoạt sau lần hiển thị thứ hai trong Backbone.js?
- 17. Tại sao hàm tạo bản sao ngầm ẩn gọi hàm tạo bản sao lớp cơ sở và hàm tạo bản sao được xác định không?
- 18. Tại sao std :: các thể hiện hàm có một hàm tạo mặc định?
- 19. Tại sao Visual Studio's intellisense hiển thị các thành viên và chức năng riêng tư?
- 20. Tại sao tạo các hàm Lua toàn cầu cục bộ?
- 21. Tại sao các lớp tĩnh không có destructors?
- 22. Tại sao các hàm thành viên của lớp đổ bóng các hàm miễn phí có cùng tên?
- 23. Activator.CreateInstance - Cách tạo ra các thể hiện của các lớp có các hàm tạo tham số
- 24. Tại sao bạn không thể kế thừa từ một lớp có hàm tạo riêng tư?
- 25. Tại sao coffeescript tạo ra các lớp như thế này?
- 26. Tại sao jQuery hiển thị/ẩn hiển thị sử dụng: không hiển thị thay vì hiển thị: bị ẩn?
- 27. Tại sao các biến được khai báo bằng "của chúng tôi" hiển thị trên các tệp?
- 28. Lớp C# không có hàm tạo
- 29. Tại sao VisualVM không hiển thị các chuỗi daemon trên Linux?
- 30. Tại sao các hàm C++ có thể tạo mảng có độ dài thay đổi?
Hoặc lấy từ '' 'ví dụ java.net.Socket''': [getInetAddress] (http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#getInetAddress()) và [getLocalAddress] (http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#getLocalAddress()). – edwardw
@edwardw - Có, nếu bạn có/có ý định có kết nối hoạt động với địa chỉ từ xa. Nhưng điều đó không phải lúc nào cũng đúng. – aroth