gpt4 book ai didi

scala - 从 Object 继承的方法被渲染为模棱两可

转载 作者:行者123 更新时间:2023-12-04 21:16:11 25 4
gpt4 key购买 nike

val x: AnyRef = 42

type mismatch: found Int(42) required: AnyRef

Note: an implicit exists from scala.Int => java.lang.Integer, but methods inherited from Object are rendered ambiguous. This is to avoid a blanket implicit which would convert any scala.Int to any AnyRef.

You may wish to use a type ascription: x: java.lang.Integer



我不明白强调的部分。哪些方法会变得模棱两可,又是怎么来的?从 Object 继承的方法在 Scala 中是否总是“呈现模糊”?这是一种特殊情况,其中方法以某种方式在一个类型中多次结束?我只是不明白歧义来自哪里。

最佳答案

Scala 不得不假装 Int在继承层次结构中的位置与 Java 放置的位置不同。这导致了一些尴尬。

考虑方法notify .等待 Int不起作用——它是一个原始的。等待新盒装java.lang.Integer也不起作用,因为其他线程可能已经结束了自己的单独装箱Integer s。你只是不想notifyInt 上工作——这是错误的做法。

但是如果你有转换 Int => java.lang.Integer没有任何异常,您可以调用notify在您的 Int 上.

为了防止这种通常错误的行为,由于歧义而无法解决转换的机制被劫持。这让 Int => java.lang.Integer服务于转换Int在哪里 AnyRef是预期的(这会破坏继承层次结构),并防止像 42.notifyAll 这样的事情从工作开始,即使 java.lang.Integer有这种方法,推理机器就不会注意到它。

您看到的消息应该涵盖 42.notify案例比42: AnyRef案子。

关于scala - 从 Object 继承的方法被渲染为模棱两可,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23120135/

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