Я хочу создать признак, который добавит некоторое свойство в класс и даст возможность цепным методам. Протестировано в Scala 2.8.1.Лучшая практика для реализации признака Scala, который поддерживает цепочку методов
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()
Что является наиболее распространенной практикой в подобной ситуации? (Предпочтительным является безопасный тип)
Это лучше. – lscoughlin
Это работает! Но я не понимаю, почему. Я думаю, 'this.type' равен' SomeProperty', не так ли? Является ли это особенностью Scala? Или также возможно в Java? – ihji
Эта статья полезна. http://scalada.blogspot.com/2008/02/thistype-for-chaining-method-calls.html – ihji