作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 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
谁能解释一下,也许能指出一个优雅的解决方案?
最佳答案
getInt
在 SpecializedClass
不会覆盖 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/
我是一名优秀的程序员,十分优秀!