【发布时间】:2019-01-30 09:41:15
【问题描述】:
我必须创建一个文件加载器对象,并且我希望在创建对象时只加载一次文件。
到目前为止,我所做的是使用 read 方法创建一个特征,该方法将读取文件并输出字符串列表。
trait Loader {
protected val readSource: List[String] = {
Source
.fromInputStream(getClass.getResourceAsStream("filename"), "UTF-8")
.getLines()
.toList
}
def transform(delimeter: String): Vector[C] = {
val lines = readSource
// process the lines
}
}
trait由多个对象实现,在客户端代码中可以多次调用transform方法。
我想避免每次调用 transform 方法时都重新读取文件,我的第一个解决方案是从 transform 方法中提取 val lines = readSource 并将其作为函数 def loadFile = readSource 并在我的对象像这样调用 loadFile :
object MyLoader extends Loader {
def apply: List[String] = {
loadFile
}
}
我想知道这是否是正确的方法。谢谢你的建议。
【问题讨论】:
-
尽管有名字,
readSource不是一个方法,它只是一个val,在创建对象时初始化一次,所以每次调用transform时都不会读取文件.但是我会将其设为lazy val,以便在第一次使用它之前不会对其进行初始化,这将在对象初始化之后。
标签: scala