Самый простой способ - это поместить вашу фабрику в case class
:
case class CacheFactory(baseTableName: String) {
lazy val getOpsCache: Cache =
Cache(s"baseTableName_ops", OpsTTL)
lazy val getSnapshotCache =
Cache(s"baseTableName_snaps", SnapshotTTL)
lazy val getMetadataCache =
Cache(s"baseTableName_metadata", MetadataTTL)
}
Как мне нравится case classes
Я также изменил ваш кэш на case class
:
case class Cache(tableName: String, TTL: Int)
Как видите, я скорректировал ваш Java код для исправления Scala код.
Если вы хотите поместить его в companion object
, вы можете использовать implicits
, например:
object Cache {
def getOpsCache(implicit baseTableName: String): Cache =
Cache(s"baseTableName_ops", OpsTTL)
def getSnapshotCache(implicit baseTableName: String) =
Cache(s"baseTableName_snaps", SnapshotTTL)
def getMetadataCache(implicit baseTableName: String) =
Cache(s"baseTableName_metadata", MetadataTTL)
}
Тогда ваш клиент будет выглядеть так:
implicit val baseTableName: String = "baseName"
cache.getSnapshotCache
cache.getMetadataCache