Вместо того, чтобы описать проблему словами, позвольте мне показать вам сеанс интерпретатора 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
.
ПРИМЕЧАНИЕ: Я пытаюсь сделать это таким образом, потому что моя иерархия классов уже способсложно.Учитывая это, я предпочитаю не добавлять <strong>ParentWithName</strong>
abstract class
или trait
, если этого можно избежать.