gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:51:55 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com