java - 原生 Java 类的类型问题

标签 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 的类型 参数范围 [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/

相关文章:

c - 使用双倍数据速率的数据简单比较

java - 如何移动/重命名上传的文件?

java - 使用表格在 Libgdx 中绘制重叠图像

java - JDBC 中的问号占位符和 c3p0 PreparedStatement 未在 setString() 中被替换

scala - "Find the Index of the First Occurrence in a String"- 使用collectFirst方法的case语句不清楚

scala - SBT 集成测试设置

scala - Spark RDD 将一行数据映射为多行

scala - 为伴随对象中的方法指定类型差异的正确方法是什么

C语言,报数据类型错误

java - 如何从 Qt 在 Android 客户端代码中调用 Google-Cloud-Messaging API?