mut*_*nUp 5 java eclipse scala scala-java-interop scala-collections
在操作scala对象(主要来自scala.collection包)时,操作符重载函数似乎可用于Java.
即斯卡拉
var s = Set(1, 2, 3)
var t = s + 4
var x = s | t
Run Code Online (Sandbox Code Playgroud)
所以在Java中,查看scala.collection.Seteclipse自动完成,我可以看到原型

但是我无法正确使用它们
import scala.collection.Set;
Set<Integer> s = new Set<Integer>();
Set<Integer> t = s.$plus(4); /* compile error with javac, or runtime error with eclipse/*
Run Code Online (Sandbox Code Playgroud)
这些scala方法如何在Java中使用?
看来您无法用 Java 编写某些 scala 接口!
该代码可以在 Sun 和 Eclipse 中正确编译和执行。
HashSet注意作业左侧的使用
import scala.collection.HashSet;
public class TestCase1 {
public static void main(String[] args) {
HashSet<String> set2 = new HashSet<String>();
HashSet<String> set4 = set2.$plus("test");
System.out.println(set2.size());
System.out.println(set4.size());
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?
我相信这与 Scala 继承多个特征的能力有关,这是 java eclipse 不理解的。
例如,HashSet 扩展了AbstractSet, Set, GenericSetTemplate,SetLike, FlatHashTable, CustomParallelizable, Serializable一些接口,其中一些是抽象类。
该.$plus()方法似乎来自SetLike,而不是Set,这可以解释为什么在超类型上调用该方法Set会导致此错误。
也就是说,我仍然不能指HashSet使用 Supertype SetLike,因为它仍然失败,这就是我能做的。
我认为这里的主要问题是 Elipse 以某种方式错误地将超类型描述为具有这些方法,这是错误的。
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |