如何在Scala类中消除var?

用户名

我已经基于相应的Java类编写了以下Scala类:结果不好。它看起来仍然像Java,充满了vars,非常长,而且在我看来并不是惯用的Scala。

我希望缩小这段代码,消除vars和@BeanHeader之类的东西。

这是我的代码:

    import scala.collection.immutable.Map 

     class ReplyEmail {

     private val to: List[String] = List()   
     private val toname: List[String] = List()
     private var cc: ArrayList[String] = new ArrayList[String]()

    @BeanProperty
    var from: String = _

    private var fromname: String = _

    private var replyto: String = _

    @BeanProperty
    var subject: String = _

    @BeanProperty
    var text: String = _

    private var contents: Map[String, String] = new scala.collection.immutable.HashMap[String, String]()

    @BeanProperty
    var headers: Map[String, String] = new scala.collection.immutable.HashMap[String, String]()

    def addTo(to: String): ReplyEmail = {
      this.to.add(to)
      this
    }

    def addTo(tos: Array[String]): ReplyEmail = {
      this.to.addAll(Arrays.asList(tos:_*))
      this
    }

    def addTo(to: String, name: String): ReplyEmail = {
      this.addTo(to)
      this.addToName(name)
    }

    def setTo(tos: Array[String]): ReplyEmail = {
      this.to = new ArrayList[String](Arrays.asList(tos:_*))
      this
    }

    def getTos(): Array[String] = {
      this.to.toArray(Array.ofDim[String](this.to.size))
    }

    def getContentIds(): Map[_,_] = this.contents

    def addHeader(key: String, `val`: String): ReplyEmail = {
      this.headers + (key -> `val`)
      this
    }

     def getSMTPAPI(): MyExperimentalApi = new MyExperimentalApi
      }

   }

= ---------------------

感谢您为实现此目标所提供的帮助。更新的代码

我对代码进行了一些小的更改,例如引入了Option [String]而不是String

case class ReplyEmail(
  to: List[String] = Nil,
  toNames: List[String] = Nil,
  cc: List[String],
  from: String,
  fromName: String,
  replyTo: String,
  subject: String,
  text: String,
  contents: Map[String, String] = Map.empty,
  headers: Map[String, String] = Map.empty) {
  def withTo(to: String): ReplyEmail = copy(to = this.to :+ to)
  def withTo(tos: List[String]): ReplyEmail = copy(to = this.to ++ to)
  def withTo(to: Option[String], name: Option[String]) = copy(to = this.to :+ to, toNames = toNames :+ name)

  def setTo(tos: List[String]): ReplyEmail = copy()
  def withHeader(key: String, value: String) = copy(headers = headers + (key  -> value))
  def smtpAPI = new MyExperimentalApi

}


现在,我面临的唯一问题是在此行:错误是:类型不匹配:找到:List [java.io.Serializable]必需:List [String]

def withTo(to: Option[String], name: Option[String]) = copy(to = this.to :+ to, toNames = toNames :+ name)
瑞安

只需使其成为案例类。

case class ReplyEmail(
  to: List[String] = Nil,
  toNames: List[String] = Nil,
  cc: List[String],
  from: String,
  fromName: String,
  replyTo: String,
  subject: String,
  text: String,
  contents: Map[String, String] = Map.empty,
  headers: Map[String, String] = Map.empty) {

  def withTo(to: String) = copy(to = this.to :+ to)

  def withTo(to: List[String] = copy(to = this.to ++ to)

  def withTo(to: String, name: String) = copy(to = this.to :+ to, toNames = toNames :+ name)

  def withHeader(key: String, value: String) = copy(headers = headers + (key -> value))

  def smtpAPI = new MyExperimentalApi

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章