3

私はJavaで次のクラスを持っています:

public class GeneralClass {
    public Integer getInt(Double d) {
        return d.intValue();
    }
}

このクラスをscalaで拡張したいと思います。

import scala.collection.JavaConversions._
import scala.collection.JavaConverters._

class SpecializedClass extends GeneralClass {

  override def getInt(d: Double): Int = {
    d.intValue()
  }
}

問題は、scala.Double も scala.Int も自動的にそれぞれの Java 型に変換されないことです。

編集 エラーメッセージは次のとおりです。

メソッド getInt は何もオーバーライドしません。注: クラス SpecializedClass のスーパー クラスには、getInt という名前の次の非最終メンバーが含まれます: def getInt(d: Double): Integer

誰かがそれを説明して、おそらくエレガントな解決策を指摘できますか?

4

3 に答える 3

1

getIntinSpecializedClassはメソッド in をオーバーライドしませんGeneralClass。オーバーライドできるようにするには、関数の引数SpecializedClassが反変であり、戻り値の型が共変である必要があります。あなたの場合はそうではありません。

そのため、型と戻り値の型を asにする何かがない限りgetInt、それはオーバーライドされません。SpecializedClassT :> java.lang.DoubleT <: java.lang.Integer

あなたの質問については、実際には、Scala コンパイラーが暗黙的に Java double を Scala Double に変換するようなメソッドが必要だとは思いません。

于 2013-06-26T12:53:53.390 に答える