Một số người có thể giải thích cho tôi thành phần chụp riêng của nhà xây dựng tư nhân với một ví dụ và chỉ ra nơi chúng tôi thực sự cần/không cần loại thiết kế này?Ví dụ Java về thành ngữ "bắt người xây dựng riêng" là gì?
Trả lời
Mục đích là chụp giá trị tạm thời trong khi xây dựng.
Một ví dụ được đưa ra trong Solution 53 của Java Puzzlers:
public class MyThing extends Thing {
private final int arg;
public MyThing() {
this(SomeOtherClass.func());
}
private MyThing(int i) {
super(i);
arg = i;
}
}
Trong trường hợp này, chúng tôi muốn nắm bắt và lưu trữ các thông số mà chúng ta muốn vượt qua các nhà xây dựng lớp cha. Để làm như vậy, chúng ta tạo ra một hàm tạo riêng của helper, mà constructor công khai của chúng ta sau đó gọi.
Giải thích được đưa ra với một ví dụ trong Java Concurrency In Practice chương 4 phần 4.3.5.
public class SafePoint {
private int x, y;
private SafePoint(int[] a) {
this(a[0], a[1]);
}
public SafePoint(SafePoint p) {
this(p.get());
}
public SafePoint(int x, int y) {
this.x = x;
this.y = y;
}
public synchronized int[] get() {
return new int[] { x, y };
}
public synchronized void set(int x, int y) {
this.x = x;
this.y = y;
}
}
Trình tạo riêng tư tồn tại để tránh điều kiện chạy sẽ xảy ra nếu trình tạo bản sao được triển khai như thế này (tr.x, p.y).
có nghĩa là gì là, nếu bạn không có một constructor tư nhân và bạn thực hiện copy constructor theo cách sau:
public SafePoint(SafePoint p) {
this(p.x, p.y);
}
Bây giờ giả sử rằng thread A có quyền truy cập vào SafePoint p đang thực hiện trên bản sao của nhà xây dựng này (px, py) hướng dẫn và tại thời điểm không may mắn khác thread B cũng có quyền truy cập vào SafePoint p thực thi setter set (int x, int y) trên đối tượng p. Kể từ khi nhà xây dựng bản sao của bạn đang truy cập x và y instance variable p 's trực tiếp mà không thích hợp khóa nó có thể nhìn thấy trạng thái không phù hợp của đối tượng p.
Trong trường hợp như xây dựng tư nhân đang truy cập biến p 's x và y qua getter được đồng bộ, do đó bạn được đảm bảo để xem trạng thái nhất quán của đối tượng p.
- 1. Xây dựng ví dụ LLVM
- 2. Ví dụ tốt về mã scala thành ngữ
- 3. Ví dụ về Bison java
- 4. Ví dụ về Waffle SSO này là gì
- 5. Ví dụ về Java BitSet
- 6. vấn đề xây dựng các ứng dụng ví dụ protobuf
- 7. Ví dụ về các trang web được xây dựng bằng Spring, Play Framework, Struts
- 8. 'Ngôn ngữ xây dựng' có nghĩa là gì?
- 9. Ví dụ về ngôn ngữ quy tắc dựa trên C#?
- 10. Phải là người xây dựng đã bị xóa riêng tư?
- 11. Ví dụ hay về trò chơi Java nguồn mở là gì?
- 12. Ví dụ về nhiệm vụ "này" trong C# là gì?
- 13. Ví dụ thực tế về ACID là gì?
- 14. Đa hình tham số trong Java (ví dụ) là gì?
- 15. Ví dụ về Java GAE DeferredTask?
- 16. Ví dụ về chủ đề Java?
- 17. OSGi là gì và một số ví dụ về việc sử dụng nó?
- 18. Ví dụ về D.ccurl
- 19. Ví dụ về dịch vụ ngôn ngữ TypeScript
- 20. Nhà xây dựng ngầm là gì trên Java
- 21. Ví dụ về thuật ngữ LaTeX đơn giản
- 22. Ví dụ về Android SSLEngine
- 23. Ví dụ về GC bắt buộc bị lỗi?
- 24. Ví dụ thực tế về đời sống của CORBA là gì?
- 25. Mã thành ngữ là gì?
- 26. Trên github, trạng thái xây dựng có ý nghĩa gì? Ví dụ:
- 27. Ví dụ về Winsock?
- 28. Ví dụ mở rộng Java
- 29. Ví dụ Java SSHD
- 30. Ví dụ đồng thời tốt về Java so với Clojure
đây có phải là ý tưởng hay để nắm bắt trạng thái của đối tượng khi hàm khởi tạo chạy và chưa hoàn thành việc thực hiện? Tôi có nghĩa là đối tượng có thể ở trạng thái không nhất quán? – Inquisitive
Downvoter: bất kỳ bình luận nào? –
@Subhra: Tôi không chắc bạn đang hỏi gì. Đối tượng nào có thể ở trạng thái không nhất quán? –