与其用语言描述问题,不如让我向您展示一个 Scala Interpreter 会话,它显示了我想要做什么。
scala> class A extends Parent{
| def name = "Alex"
| }
defined class A
scala> class B extends Parent{
| def name = "Bernardo"
| }
defined class B
scala> def addFamilyName[T <: Parent](fn:String, c:T{def name():String}) = c.name + " " + fn
addFamilyName: [T <: Parent](fn: String, c: T{def name(): String})java.lang.String
scala> addFamilyName( "Martins", new A())
<console>:11: error: type mismatch;
found : A
required: ?{def name(): String}
addFamilyName( "Martins", new A())
^
所以基本上我想在一个参数中定义一个类型,它既是某种类型的子类,又包含一个带有签名的方法 def name():String
。
注意:我正在尝试这样做,因为我的类层次结构已经很复杂了。鉴于此,我宁愿不添加 aParentWithName
abstract class
或者trait
是否可以避免。