gpt4 book ai didi

scala - 如何消除 Scala 类中的变量?

转载 作者:行者123 更新时间:2023-12-01 09:36:27 26 4
gpt4 key购买 nike

我基于相应的 Java 类编写了以下 Scala 类: 结果并不好。它看起来仍然像 Java,充满了变量,很长,而且在我看来不是惯用的 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


现在,我面临的唯一问题是这一行: 错误是:type mismatch: found: List[java.io.Serializable] required: 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

}

关于scala - 如何消除 Scala 类中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29867993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com