java - 如何从 Java 调用具有数字参数的 Scala 方法

标签 java scala

我有一个采用 Numeric[T] 对象的 Scala 方法:

def needNumeric[T](value: T)(implicit n: Numeric[T]) = {
  // do something
}

如何从 Java 调用此方法?我想出的最好方法是:

needNumeric(0, scala.math.Numeric.IntIsIntegral$.MODULE$);

但是代码看起来很丑,而且不太通用。有更好的方法吗?

最佳答案

Java 支持多态方法,那么像这样的方法怎么样:

object original {
  def needNumeric[T](value: T)(implicit n: Numeric[T]) = {
    // do something
  }
}

object NeedNumeric {
  def needNumeric(value: Int) = original.needNumeric(value)
  def needNumeric(value: Long) = original.needNumeric(value)
  def needNumeric(value: Float) = original.needNumeric(value)
  def needNumeric(value: Double) = original.needNumeric(value)
  def needNumeric(value: BigInt) = original.needNumeric(value)
  ...
}

import NeedNumeric._

枚举类型很乏味(这就是 Scala 使用类型类的原因),但对于数值来说应该没问题,因为数值类型并不多。

<小时/>

如果这是您自己的 needNumeric 方法,请注意签名可以简化为:

def needNumeric[T: Numeric](value: T) = {

关于java - 如何从 Java 调用具有数字参数的 Scala 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52033211/

相关文章:

java - 通过 Socket 传递 TreeMap 对象(从服务器到客户端)

java - 打印给定数字的所有唯一因子组合

Scala 喷雾路由语法

java - 动态链接 : Class not visible to ClassLoader, 但我已经尝试过每一个?

java - 如何从不同的类访问变量

java - Log4j2 - 如何配置 JDBC Appender?

Scala 检查映射中的值

scala - 通过对存储在列表中的字段宽度值进行切片/分割,将 apache-spark 数据帧字符串列拆分为多个列

scala - 从 Supervisor 重新启动后向 actor 发送消息

scala - 将 Java 与 Scala 混合使用可变 TreeMap