gpt4 book ai didi

scala - 如何在纯 Scala 中表示盒装 Double?

转载 作者:行者123 更新时间:2023-12-03 02:27:36 24 4
gpt4 key购买 nike

在 Scala 中, double 字有两种表示形式,一种是 AnyVal,另一种是 AnyRef。在 JVM 上,它们分别映射到原语 double 和类 java.lang.Double

现在在 JVM 以外的平台上会发生什么?我可以使用 Scala.Double 作为原语,但是如何指定我想要对装箱 Double 的引用而不指定 java.lang.Double?

<小时/>

[上下文 - 留下来理解托马斯的回答,但不是根本问题。

我有一个 Double,我想将其与 Spring 一起注入(inject)到 Wicket 组件中:

class MyPanel(id: String) extends Panel(id) {
@SpringBean(name="rxAlarmLimitDb") var alarmLimitDb: Double = _

如果我将类型指定为上面的 scala.Double,则注入(inject)器会失败,因为它只能注入(inject)对象。

如果我指定 java.lang.Double 作为字段的类型,一切都很好

class MyPanel(id: String) extends Panel(id) {
@SpringBean(name="rxAlarmLimitDb") var alarmLimitDb: java.lang.Double = _

但是我正在尝试减少对 Java API 的依赖,那么如果没有它,我如何表示盒装的 Double 呢?]

最佳答案

Java 中的

scala.Double == double 。当您装箱 scala.Double 时,它会变成 java.lang.Double

scala> val f = 45d;
f: Double = 45.0

scala> println("f=" + f.getClass)
f=double

scala> def foo(d: Any) = println("d=" + d.getClass)
foo: (d: Any)Unit

scala> foo(f)
d=class java.lang.Double

没有任何方法可以创建 scala.Double 类型的对象。它只是 double 的别名。因此,对于您的问题,您需要使用 java.lang.Double,或者将其包含在您自己的类型中并提供隐式转换。

如果你仔细想想,这个定义是有道理的。 java 和 scala 代码之间需要自动装箱和拆箱的所有交互都将按预期工作。

如果有影响,您始终可以这样做:

type BoxedDouble = java.lang.Double

那么你就不必看到 java.lang :-)

关于scala - 如何在纯 Scala 中表示盒装 Double?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7718649/

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