2017-05-20 12 views
0

Javaのシグネチャに変換できないJavaメソッドのシグネチャがあります。ここでJavaからScalaへのワイルドカードでメソッドのオーバーライドを変換する

は、Javaコードです:

public class InjectorListCellRenderer extends DefaultListCellRenderer { 
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
    throw new RuntimeException("not important"); 
    } 
} 

そして、ここで私が同等であることを望んだのScalaコード:

class InjectorListCellRenderer(var painter: ParticleLabelPainter) extends DefaultListCellRenderer { 
    override def getListCellRendererComponent(list: JList[_], value: Any, index: Int, isSelected: Boolean, cellHasFocus: Boolean): Component = { 
    throw new RuntimeException("not important") 
    } 
} 

SBTとScalaの2.11.8でコンパイルするときしかし、私は次の取得しますエラー:

クラスInjectorListCellRendererはabstract型である必要があります。メソッドのgetListCellRendererComponentはtrait型のListCellRenderer(x $ 1:javax.swing.JList [_java.awt.Componentが定義されていません

基本クラスDefaultListCellRendererのドキュメントはhereです。

自分のコードでこの問題を再現できないようです。

答えて

-1

あなたはそれを穴のように残しているので、JListの引数の型は同じではありません。少なくとも、オブジェクトであることが必要です。[_]

object,anyを入力するか、またはTとパラメトリックにすると動作するようです。私は次のように動作するはず推測するエラーメッセージから始まっ

class InjectorListCellRenderer() extends DefaultListCellRenderer{ 
    def getListCellRendererComponent(list: JList[Object], value: Any, index: Int, isSelected: Boolean, cellHasFocus: Boolean) = ??? 
} 

または

class InjectorListCellRenderer() extends DefaultListCellRenderer{ 
    def getListCellRendererComponent[T](list: JList[T], value: Any, index: Int, isSelected: Boolean, cellHasFocus: Boolean) = ??? 
} 
+1

実際に試しましたか?私が何かを逃していない限り、あなたは同じ消しゴムで2つの方法に関するエラーを取得する必要があります。そしてもしそうなら、どちらのメソッドもJavaメソッドをオーバーライドしないので、 'JList'コードによって呼び出されません。 –

+0

私は提案された解決策を試しましたが、うまくいきません。 – KeyboardDrummer

+0

これは2つの解決策であることを明確にするために、両方を同時に使用することはできません(同じクラス名)。私は両方のコンソールで実行し、コンパイルしたが、私はそれを使用して完全なアプリを持っていない。 – Stephen

2

class InjectorListCellRenderer(var painter: ParticleLabelPainter) extends DefaultListCellRenderer { 
    override def getListCellRendererComponent(list: JList[_ <: AnyRef], value: AnyRef, index: Int, isSelected: Boolean, cellHasFocus: Boolean): Component = { 
    throw new RuntimeException("not important") 
    } 
} 

編集:いくつかの実験の後、私はDefaultListCellRendererから継承していることを考えると、 getListCellRendererComponentをオーバーライドすることはできません。Javaとスカラの型表現。これが重要な場合は、バグレポートを提出することを検討することもできます。

関連する問題