gpt4 book ai didi

java - scala 运算符作为 java 中的方法

转载 作者:搜寻专家 更新时间:2023-10-31 20:34:11 25 4
gpt4 key购买 nike

当操作 scala 对象(主要来自 scala.collection 包)时,运算符重载函数似乎可以在 Java 中使用。

即在斯卡拉

var s = Set(1, 2, 3)
var t = s + 4
var x = s | t

所以在 Java 中,查看 Eclipse 自动完成中的 scala.collection.Set,我可以看到原型(prototype)

eclipse screenshot

但我无法正确使用它们

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/*

如何在 Java 中使用这些 Scala 方法?

最佳答案

看来您不能在 Java 中对某些 Scala 接口(interface)进行编码!
此代码可在 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());


}
}

为什么会这样?

我认为这与 Scalas 继承多个特征的能力有关,而 java eclipse 不理解这一点。

例如,HashSet 扩展了 AbstractSet、Set、GenericSetTemplate、SetLike、FlatHashTable、CustomParallelizable、Serializable,其中一些是接口(interface),一些是 AbstractClasses。

.$plus() 方法似乎来自 SetLike,而不是 Set,这可以解释为什么在Set 父类(super class)型会导致此错误。

也就是说,我仍然无法使用父类(super class)型 SetLike 引用 HashSet,因为它仍然失败,这就是我所能做的。

我认为这里的主要问题是 Elipse 以某种方式错误地将父类(super class)型描述为具有这些方法,这是错误的。

关于java - scala 运算符作为 java 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25055951/

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