Tôi muốn tạo một đặc điểm thêm một số thuộc tính vào một lớp và làm cho nó có thể thành các phương thức chuỗi. Thử nghiệm trong Scala 2.8.1.Thực tiễn tốt nhất để thực hiện đặc điểm Scala hỗ trợ phương pháp chuỗi
trait SomeProperty {
var prop : String = "default"
def setProp(s: String) = {
prop = s
this
}
}
sealed abstract class Value
case class IntegerValue(v: Int) extends Value
case class FloatValue(v: Float) extends Value with SomeProperty {
def foo() = { println("I'm foo.") }
}
case object UnknownValue extends Value with SomeProperty {
def bar() = { println("I'm bar.") }
}
scala> val x = UnknownValue
scala> x.setProp("test").bar()
<console>:10: error: value bar is not a member of SomeProperty
x.setProp("test").bar()
Thực tiễn phổ biến nhất trong loại tình huống này là gì? (Ưu tiên loại an toàn hơn)
Điều này là tốt. – lscoughlin
Nó hoạt động! Nhưng tôi không hiểu tại sao. Tôi đoán 'this.type' bằng 'SomeProperty', phải không? Scala này có cụ thể không? Hoặc cũng có thể trong Java? – ihji
Bài viết này hữu ích. http://scalada.blogspot.com/2008/02/thistype-for-chaining-method-calls.html – ihji