现在的位置: 首页 > 综合 > 正文

Scala的Trait

2019年06月18日 ⁄ 综合 ⁄ 共 1035字 ⁄ 字号 评论关闭

Trait就像一个拥有部分实现的接口,它提供了一个介于单一继承和多重继承的中间地带,因为我们可以在其他类里面混入(mix in)它们。这样就可以用一组特性对类进行增强。

示例:

abstract class Writer {

  def writeMessage(message: String)
}

trait UpperCaseWriter extends Writer {
  abstract override def writeMessage(message: String): Unit = {
    super.writeMessage(message.toUpperCase())
  }
}

trait ProfanityFilteredWriter extends Writer {
  abstract override def writeMessage(message: String): Unit = {
    super.writeMessage(message.replace("stupid", "s-----"))
  }
}

class StringWriterDelegate extends Writer {
  
  val writer = new java.io.StringWriter
  
  override def writeMessage(message: String) = writer.write(message)

  override def toString() = writer.toString()
}

调用:

val myWriterProfanityFirst = 
          new StringWriterDelegate 
          with UpperCaseWriter
          with ProfanityFilteredWriter
          
    val myWriterProfanityLast = 
          new StringWriterDelegate 
          with ProfanityFilteredWriter
          with UpperCaseWriter
      
    myWriterProfanityFirst.writeMessage("There is no sin except stupidity") 
    myWriterProfanityLast.writeMessage("There is no sin except stupidity") 
          
    println(myWriterProfanityFirst)
    println(myWriterProfanityLast)

结果:

THERE IS NO SIN EXCEPT S-----ITY
THERE IS NO SIN EXCEPT STUPIDITY

抱歉!评论已关闭.