加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala运算符作为java中的方法

发布时间:2020-12-16 18:30:50 所属栏目:安全 来源:网络整理
导读:在操作 scala对象(主要来自 scala.collection包)时,操作符重载函数似乎可用于 Java. 即斯卡拉 var s = Set(1,2,3)var t = s + 4var x = s | t 所以在Java中,在eclipse自动完成中查看scala.collection.Set,我可以看到原型 但是我无法正确使用它们 import scal
在操作 scala对象(主要来自 scala.collection包)时,操作符重载函数似乎可用于 Java.

即斯卡拉

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

所以在Java中,在eclipse自动完成中查看scala.collection.Set,我可以看到原型

但是我无法正确使用它们

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

这些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());


    }
}

为什么会这样?

我相信这与Scalas继承多个特征的能力有关,这是java eclipse无法理解的.

例如,HashSet扩展了AbstractSet,Set,GenericSetTemplate,SetLike,FlatHashTable,CustomParallelizable,Serializable,其中一些接口是AbstractClasses.

.$plus()方法似乎来自SetLike,而不是Set,这可以解释为什么在Set Supertype上调用方法会导致此错误.

那说我仍然不能使用Supertype SetLike来引用HashSet,因为它仍然失败,这就是我可以去的.

我认为这里的主要问题是Elipse以某种方式歪曲Supertype作为那些方法,这是错误的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读