2009-06-23 11 views
3

私は以下の問題を抱えています。多分誰かが私を助けてくれるかもしれません(または私の間違いがどこにあるのかを説明してください) です。与えられた特性とクラスです:ネイティブJavaクラスの型の問題

class ScalaTextUser extends TextAttr[ScalaText] { 
    override val obj = new ScalaText 
} 

大丈夫です。今、私はそれらの両方を使用して新しいクラスを作成

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 
} 

。しかし、クラス org.eclipse.swt.widgets.Text(またはその他の純粋なJavaクラス)でそのようなものを作成したい場合は、エラーが発生します。ここでは、コード:

class SwtTextUser(parent:Composite) extends TextAttr[Text] { 
    override val obj = new Text(parent, 0) 
} 

そして、これは誤りです:AnyRef:

型引数は、[org.eclipse.swt.widgets.Text] TextAttrのタイプ パラメータ範囲[T <を形質に準拠していません。 {def setText(String):ユニット; def getText:String}]

アイデアはありますか?

ありがとう、クリス。

+0

ただチェックしますが、ScalaのStringはjava.lang.Stringと同じですか? –

答えて

2

は、以下に形質宣言を変更してみてください:

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

Scalaはと括弧なしの方法のために微妙に、異なる処理を有しています。疑問があるときは、括弧を追加し、コンパイラに物事を整理させます。