我根据相应的Java类编写了以下Scala类:结果不好。它仍然看起来像Java一样,充满了vars,很长,而且在我看来并不是惯用的Scala。
我希望缩小这段代码,消除变量和@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
}
现在,我面临的唯一问题是这一行: 错误是:类型不匹配:找到:列表[java.io.Serializable] required:List [String]
def withTo(to: Option[String], name: Option[String]) = copy(to = this.to :+ to, toNames = toNames :+ name)
答案 0 :(得分:6)
只需将其作为案例类。
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
}