我知道Scala的JavaConversions会在各种Java和Scala集合之间添加隐式转换。我知道在Scala中使用
然而,在我的情况下,我正在运行一些Java代码,它在顶部有以下内容:
现在不知怎么的,似乎魔法般地,在顶部加上那个
例如,我有一个方法:
如果我从外部调用该方法,则返回的
它是如何工作的?
Java语言本身没有
当遇到该
Scala如何向现有的Java类添加方法?
这里涉及到的时间问题是什么?在
implicit
关键字可以实现这一点。然而,在我的情况下,我正在运行一些Java代码,它在顶部有以下内容:
import scala.collection.JavaConversions;
现在不知怎么的,似乎魔法般地,在顶部加上那个
import
之后,当使用Java集合时下面的代码就会发生变化。例如,我有一个方法:
public static Collection<String> foo() { return ... }
如果我从外部调用该方法,则返回的
Collection
实例会被某种方式改变。它添加了额外的方法。通过一些我不理解的机制,即使没有涉及到Scala或JavaConversions,该代码也会导致类加载器引入Scala类。它是如何工作的?
Java语言本身没有
implicit
关键字或扩展方法,但Scala有。不知何故,导入Scala库正在做一些底层操作(可能)无法在Java中表达,但仍受JVM支持。当遇到该
import
时会发生什么?Scala如何向现有的Java类添加方法?
这里涉及到的时间问题是什么?在
import
时间、类加载时间还是其他时间点上会发生什么?
foo()
调用了另一个方法,该方法内部确实使用了Scala集合,但如果没有看到代码,我就无法再说更多了。 - Alexey Romanov