2012-03-21 28 views
12

thể trùng lặp:
What is the rationale behind having companion objects in Scala?Scala: đồng hành mục đích đối tượng

Cảm ơn tất cả phản ứng với bài trước của tôi (Scala: companion objects and "new" keyword). Tôi muốn hỏi bạn mục đích chung của một đối tượng đồng hành ở Scala là gì? Thứ nhất, chúng ta có thể không bao gồm tất cả các phương pháp, chẳng hạn như áp dụng, trong các hình thức của contructor/phương pháp định nghĩa trên lớp chính nó? Hơn nữa, điểm của đối tượng Boolean đồng hành là gì, vì nó thậm chí không định nghĩa phương thức áp dụng?

Xin cảm ơn trước vì tất cả các câu trả lời của bạn.

+0

[câu trả lời dưới đây] (http://stackoverflow.com/a/9806136/39396) là tốt hơn câu trả lời được chấp nhận cho bản sao. –

Trả lời

18

đối tượng Companion là cần thiết để:

  • phương pháp khai báo liên quan đến lớp học của bạn đồng hành mà nếu không sẽ là tĩnh (không giống như trong Java, bạn không thể khai báo một phương thức tĩnh trong lớp học riêng của mình trong Scala)
  • khai báo các phương pháp unapplyunapplySeq để xác định trình giải nén tùy chỉnh để đối sánh mẫu (xem here)
  • phương thức thường được sử dụng làm phương pháp tạo nhà sản xuất của lớp cụ thể (nhưng không nhất thiết phải)
  • đối tượng đồng hành có thể truy cập các trường và phương thức riêng của đặc điểm/lớp học đồng hành của chúng - hữu ích cho việc tạo các hoạt động tĩnh trên đặc điểm/lớp học cụ thể
  • chúng quan trọng đối với implicit resolution - khi tìm kiếm giá trị ngầm định của một loại nhất định , đối tượng đồng hành của loại đó được kiểm tra xem có tồn tại định nghĩa implicit tương ứng hay không; thấy các quy tắc chính xác của độ phân giải tiềm ẩn trong Scala specification hoặc một bản tóm tắt ngắn trong this blog post

Đối tượng Boolean trong thư viện chuẩn Scala cung cấp các phương pháp boxunbox sử dụng để chuyển đổi giữa các phép toán luận nguyên thủy và bọc, cơ quan đại diện đối tượng của họ. Nó được bổ sung (hiện tại) được sử dụng như một đối số cho chú thích @specialized, để biểu thị các loại nguyên thủy mà lớp cần phải được chuyên môn hóa.

+0

Vì vậy, trong trường hợp của một boolean, hộp/unbox đóng một vai trò của một phương pháp giống như tĩnh cho Java? trong Java, chúng ta sẽ có định nghĩa Boolean.Box (boolean b)? – Bober02

+1

Nếu bạn sử dụng thư viện chuẩn Scala từ bên trong một chương trình Java, bạn sẽ thấy phương thức 'box' như một phương thức tĩnh. – axel22

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