Проблемы с типами с родными классами Java - PullRequest
3 голосов
/ 23 июня 2009

У меня следующая проблема, может быть, кто-то может мне помочь (или объяснить, где моя ошибка является). Даны черта и класс:

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

У кого-нибудь есть идея?

Спасибо, Крис.

1 Ответ

2 голосов
/ 23 июня 2009

Попробуйте изменить объявление признака на следующее:

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

В Scala есть несколько иной подход к методам с круглыми скобками и без них. Если сомневаетесь, добавьте паренсы и дайте компилятору разобраться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...