Ale*_*ins 2 types scala class-hierarchy structural-typing
不要用文字描述问题,而是让我向你展示一个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())
^
Run Code Online (Sandbox Code Playgroud)
所以基本上我想在参数中定义一个类型,它既是某个类型的子类,也包含一个带签名的方法 def name():String.
注意:我试图这样做,因为我的类层次结构已经变得复杂了.鉴于此,我宁愿不添加ParentWithName abstract class或者trait是否可以避免.
信不信由你,问题出在方法签名的括号中.这有效:
def addFamilyName[T <: Parent](fn:String, c:T{def name:String}) =
c.name + " " + fn
Run Code Online (Sandbox Code Playgroud)
虽然我应该添加你实际上不需要类型参数.这同样好:
def addFamilyName(fn:String, c:Parent{def name:String}) =
c.name + " " + fn
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |