我已经基于相应的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] 删除。
我来说两句