Tôi đang tìm cách xác định phương thức trả về kiểu T trong đó T = loại của lớp con.Loại trừu tượng Scala đại diện cho loại phân lớp
Tôi biết tôi có thể làm điều này bằng cách sử dụng các loại trừu tượng, nhưng không thích chi phí phải xác định lại T cho từng phân lớp.
Một số mẫu mã:
object Helper {
def help[A <: MyClass](cls: A): Option[A] = { cls.foo() map { _.asInstanceOf[A] } }
}
class MyClass {
type T <: MyClass
def foo(): Option[T] = Some(this.asInstanceOf[T])
}
class ChildClass extends MyClass {
type T = ChildClass
}
Có thể là một tính năng ngôn ngữ mới đã làm cho dễ dàng hơn điều này? Hoặc tôi có thể sử dụng this.type theo một cách nào đó? Điều quan trọng với tôi là tôi có thể định nghĩa một lớp trợ giúp có thể gọi vào foo theo cách này.
Bất kỳ cơ hội bạn có thể chỉ cho tôi hướng tới một số cú pháp cụ thể mà sẽ làm việc cho rằng tôi cần phải viết Helper.help chính xác như là (với các tham số kiểu)? this.type không khớp với A? Ngoài ra, lưu ý rằng tôi cần phải trả về Option [this.type], và def foo: Option [this.type] = Một số (điều này) dường như không biên dịch. Cảm ơn bạn đã giúp đỡ! –
@Pandora Singleton loại không bao giờ suy ra, bạn phải xác định rõ ràng: 'Some [this.type] (this)'. –
Cảm ơn rất nhiều! Tôi đã chạy vào một trục trặc kể từ khi chức năng foo của tôi trong thực tế thực sự gọi ra phương pháp tĩnh của đối tượng khác -> theo dõi câu hỏi ở đây nếu bạn có hiểu biết :) http://stackoverflow.com/questions/6886182/scala-this- type-conformance-to-type-parameter-bounds-of-supertype –