Tôi đang cố gắng để tìm ra cách để gọi một constructor cho một loại trừu tượng Scala:Làm cách nào tôi có thể gọi hàm khởi tạo của kiểu trừu tượng Scala?
class Journey(val length: Int)
class PlaneJourney(length: Int) extends Journey(length)
class BoatJourney(length: Int) extends Journey(length)
class Port[J <: Journey] {
def startJourney: J = {
new J(23) // error: class type required but J found
}
}
Đây có phải là thậm chí khả thi? Tôi quen thuộc với Scala manifests nhưng tôi không rõ làm thế nào họ có thể giúp đỡ ở đây. Tương tự như vậy tôi không thể tìm ra cách để làm điều tương tự với người bạn đồng hành của đối tượng áp dụng() constructor:
object Journey { def apply() = new Journey(0) }
object PlaneJourney { def apply() = new PlaneJourney(0) }
object BoatJourney { def apply() = new BoatJourney(0) }
class Port[J <: Journey] {
def startJourney: J = {
J() // error: not found: value J
}
}
Bất kỳ suy nghĩ gratefully nhận được!
Cảm ơn Moritz - nhưng dán mã của bạn vào REPL sẽ ném một vài lỗi? Ngoài ra làm thế nào tôi sẽ thêm các tham số để mặc định "constructor"? –
Bạn phải nhập chế độ dán cho mã này để làm việc trong REPL (chỉ cần gõ ': dán' trước khi dán). Cũng có một lỗi trong đoạn mã đã được Philippe sửa. – Moritz
Nếu bạn muốn thêm các tham số, bạn có thể chỉ cần thêm một phương thức mới trong đặc tính 'Default'. 'ngầm định [Default [J]]' sẽ cung cấp cho bạn một cá thể của đặc điểm với các tham số kiểu được cung cấp và bạn có thể gọi bất kỳ phương thức nào bạn thích trên nó, ví dụ: 'ngầm định [Mặc định [J]]. tạo (23)'. Xem ví dụ [câu hỏi này] (http://stackoverflow.com/questions/5598085/where-does-scala-look-for-implicits) để biết chi tiết về cách hoạt động của implicits. – Moritz