問題を言葉で説明する代わりに、私がやりたいことを示すScalaインタープリターセッションを紹介します。
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
。
注:クラス階層はすでに複雑になっているため、この方法で実行しようとしています。これを考えると、私は追加しないか、それを回避できるParentWithName
abstract class
かどうかを好みます。trait