我有以下问题,也许有人可以帮助我(或解释,我的错误 是)。鉴于特质和阶级:
trait TextAttr[T <: {def setText(s:String); def getText : String}] {
val obj : T
def txt_= (s:String) = obj.setText(s)
def txt = obj.getText
}
class ScalaText {
private var t = ""
def setText(s:String) = t = s
def getText = t
}
现在我使用它们创建一个新类:
class ScalaTextUser extends TextAttr[ScalaText] {
override val obj = new ScalaText
}
没关系。但是,如果我想在课堂上创造类似的东西 org.eclipse.swt.widgets.Text(或任何其他纯Java类)我收到一个错误。代码如下:
class SwtTextUser(parent:Composite) extends TextAttr[Text] {
override val obj = new Text(parent, 0)
}
这就是错误:
类型参数[org.eclipse.swt.widgets.Text]不符合特征TextAttr的类型 参数bounds [T&lt ;: AnyRef {def setText(String):Unit; def getText:String}]
有人有想法吗?
谢谢,克里斯。答案 0 :(得分:2)
尝试将特征声明更改为以下内容:
trait TextAttr[T <: {def setText(s: String); def getText(): String}] {
对于有括号和无括号的方法,Scala的处理方式略有不同。如果有疑问,请添加parens并让编译器对其进行排序。