输入本机Java类的问题

时间:2009-06-23 14:28:49

标签: java scala types

我有以下问题,也许有人可以帮助我(或解释,我的错误 是)。鉴于特质和阶级:

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}]

有人有想法吗?

谢谢,克里斯。

1 个答案:

答案 0 :(得分:2)

尝试将特征声明更改为以下内容:

trait TextAttr[T <: {def setText(s: String); def getText(): String}] {

对于有括号和无括号的方法,Scala的处理方式略有不同。如果有疑问,请添加parens并让编译器对其进行排序。