我有以下问题,也许有人可以帮助我(或解释,我的错误在哪里 是)。给定一个特征和一个类:
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 <: AnyRef{def setText(String): Unit; def getText: String}]
有人有想法吗?
谢谢,克里斯。
最佳答案
尝试将特征声明更改为以下内容:
trait TextAttr[T <: {def setText(s: String); def getText(): String}] {
Scala 对带括号和不带括号的方法的处理方式略有不同。如有疑问,请添加括号并让编译器解决问题。
关于java - 原生 Java 类的类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1032911/