問題を言葉で説明するのではなく、私が何をしたいのかを示すScalaインタープリタセッションを紹介しましょう。ALSOではサブクラスのみを受け入れるスケーラで構造型を入力する方法は?
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
を追加しない方がよいです。
メソッド 'name'と' name() 'は同じものではありません。後者を呼び出すことは前者の構文で行うことができますが、それは明確で構造的な型であり、特にそれらを同じではないと考えています。 –