java - 隐式转换、覆盖、互操作性

标签 java scala scala-java-interop

我在 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 类型。

编辑 错误信息是:

method getInt overrides nothing. Note: the super classes of class SpecializedClass contain the following, non final members named getInt: def getInt(d: Double): Integer

谁能解释一下,也许能指出一个优雅的解决方案?

最佳答案

getIntSpecializedClass不会覆盖 GeneralClass 中的方法.为了能够覆盖,SpecializedClass 中的函数参数应该是逆变的,返回类型是协变的。在你的情况下不是。

所以除非你在 getInt 里有东西在 SpecializedClass它采用类型 T :> java.lang.Double返回类型为 T <: java.lang.Integer ,它不会覆盖它。

对于你的问题,其实我觉得不需要这样的方法,因为Scala编译器会隐式地将Java double转换为Scala Double。

关于java - 隐式转换、覆盖、互操作性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17319756/

相关文章:

scala - 从 Java 到 Scala 集合相互转换的与版本无关的方式

java在递归函数中保留信息

java - 我们如何使用 JAVA 下载 HTML 页面?

java - 从 Socket 读取时卡在写操作中

java - 将包含 boolean 值的 Scala 映射转换为包含 java.lang.Boolean 的 Java 映射

java - 不能将 A[T] 隐式转换为 AT,其中 A[T] 扩展 AT

java - 从 Java 访问继承自通用 Java 基类的 Scala 对象

java - 静态文件找不到 Spring MVC + Thymeleaf

scala - Parboiled2 解析器示例

java - Scala Iterator 与 Java Iterator 的问题(类型转换噩梦): How to cast to Java from Scala?