我还是对Scala有些陌生。
如何编写Scala代码以通用的方式引用案例类(case class)的伴生对象中的方法?我尝试了几种不同的方法,但似乎找不到可行的解决方案。
以下是一些示例代码,它可以工作,但我必须手动构建每个子类。
例如:
class One extends Act[LetterA] {
val intro = LetterA.sayhi
}
我更喜欢像这样做:
class AllOfThem[T <: LettersClass, S <: LettersSingleton] extends Act[T] {
val intro = S.sayhi
}
但是我似乎找不到能正常工作或编译的语法。应该如何正确地实现这个功能,或者说这种功能在该语言中不被支持?我意识到我可能对类和特性的结构有些偏差,但我不确定如何最好地解决这个问题。
另外,在Act类的方法'actionTwo'中,是否有一种类似于我已注释掉的内容的方法?
示例代码清单:
trait LettersSingleton {
def sayhi() : String
}
trait LettersClass {
val id : Int
}
// trait Letters extends LettersClass with LettersSingleton { }
object LetterA extends LettersSingleton {
def sayhi = "Hi I am A"
}
object LetterB extends LettersSingleton {
def sayhi = "Hi I am B"
}
case class LetterA( val id : Int ) extends LettersClass { }
case class LetterB( val id : Int, val name:String ) extends LettersClass { }
abstract class Act[ T <: LettersClass ] {
val intro : String
def actionOne( a : T ) = {
println( a.id + " is my id" )
}
def actionTwo() = {
// println( T.sayhi )
}
}
class One extends Act[LetterA] {
val intro = LetterA.sayhi
}
class Two extends Act[LetterB] {
val intro = LetterB.sayhi
}