我遇到以下问题,也许有人可以帮助我(或解释我的错误所在)
是)。给定一个特征和一个类:

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的处理方式略有不同。如有疑问,请添加括号并让编译器将其整理。

10-06 14:17
查看更多