Tôi có một lớp học mà tôi muốn sử dụng trong một scala.collection.mutable.PriorityQueue, nhưng tôi không muốn làm cho nó được đặt hàng [A] chỉ cho một mục đích này. Tôi không xem xét thứ tự tôi muốn sử dụng liên quan đến PriorityQueue như thứ tự tự nhiên của lớp.Scala: Có cách nào để sử dụng PriorityQueue như tôi làm trong Java không?
class MyObject (sequence: Int, values: List[String]) ...
Vì vậy, trong PriorityQueue, tôi muốn các giá trị được sắp xếp theo 'chuỗi'. Tuy nhiên, chỉ vì hai đối tượng có cùng trình tự không làm cho chúng tự nhiên như nhau vì nội dung của 'giá trị' của chúng có thể khác nhau.
Đây là nơi, trong Java, thật tuyệt khi có thể cung cấp đối tượng Comparator thay thế cho PriorityQueue. Comparator của tôi sẽ chỉ đơn giản là đặt hàng các đối tượng liên quan đến 'chuỗi' của họ và bỏ qua 'giá trị' của họ.
Lớp PriorityQueue phải được tham số với "Một <% Ordered [A]"
class PriorityQueue[A <% Ordered[A]] extends ...
Từ những gì tôi đã đọc, điều này có nghĩa lớp của tôi phải mở rộng Ordered [A] hoặc tôi phải cung cấp một chuyển đổi loại "ngầm định" thành Ordered [A], thành thật mà nói, cảm thấy không phù hợp.
Giải pháp Java có vẻ "chức năng" hơn cho phép tôi chuyển đối tượng giống như hàm so sánh thay vì buộc tôi vào một hệ thống phân cấp lớp hoặc monkeypatching lớp của tôi.
Tôi nhận thấy có những lựa chọn thay thế để sử dụng PrioirityQueue, nhưng tôi cảm thấy như tôi có thể gặp phải đường cong học tập Scala ở đây và không muốn từ bỏ mà không khám phá quyết định thiết kế này đầy đủ.
Đây có phải là một quyết định không may trong thư viện Scala hay tôi hiểu nhầm một số loại quy ước gọi điện mà làm cho PriorityQueue dễ sử dụng hơn và 'chức năng'?
Cảm ơn