我遇到以下问题,也许有人可以帮助我(或解释我的错误所在)
是)。给定一个特征和一个类:
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的类型
参数界限[T
有人知道吗?
谢谢,克里斯。
最佳答案
尝试将特征声明更改为以下内容:
trait TextAttr[T <: {def setText(s: String); def getText(): String}] {
对于带括号和不带括号的方法,Scala的处理方式略有不同。如有疑问,请添加括号并让编译器将其整理。