我有一个通用类:
class SomeValue[T](private val value: T) {
override def toString = value.toString
}
在我的应用程序中,我将使用这个类的特定结构:
val five = new SomeValue[Int](5) // doing this a lot
assert(five.toString == "5")
这非常冗长,容易出现拼写错误(例如偶然将其设置为6)。为了解决这个问题,我想创建一个掩盖这种模式的类:
class Five { ... }
所以我现在可以这样做:
val five = new Five
assert(five.toString == "5")
我知道一种愚蠢的例子,但希望你能得到这张照片!
答案 0 :(得分:3)
看起来你正在构建常量,因此我建议使用Scala objects。
e.g。
object Main extends App {
assert(Five.toString == "5")
assert(Hello.toString == "hello")
}
class SomeValue[T](private val value: T) {
override def toString = value.toString
}
object Five extends SomeValue[Int](5)
object Hello extends SomeValue[String]("hello")
答案 1 :(得分:1)
为什么不定义一个方法而不是一个全新的类?
class SomeValue[T](private val value: T) { ... }
object SomeValue {
// since the class appears to be immutable, it could also be a val
def five = new SomeValue(5)
}
// elsewhere
SomeValue.five
当然,如果需要,此方法可以具有参数和类型参数(例如,仅修复一些构造函数参数)。
答案 2 :(得分:0)
在发布我的问题之后想出了这个。
class Five extends SomeValue[Int](value = 5) {}
似乎没错,但任何人都可以确认吗?