我可以直接在Java中使用scala List吗?

编程入门 行业动态 更新时间:2024-10-14 22:17:53
本文介绍了我可以直接在Java中使用scala List吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我可以在Java中使用scala List,例如:

Can I use scala List in Java, like :

import scala.collection.immutable.List; class HelloScalaList { public static void main (String[] args) { List xs = List(1, 2, 3); System.out.println(xs); } }

似乎没有编译。找不到List $ .apply方法。

It does not seem to compile. can't find List$.apply method.

当我将其更改为

List xs = Dir.ls()

其中Dir是我的scala类,而ls ()返回一个scala List,编译器抱怨

where Dir is my scala class, and ls() returns a scala List, the compiler complaints about

内部编译器错误:java.lang.ClassCastException:org.eclipse.jdt。 internalpiler.lookup.BaseTypeBinding 无法强制转换为 org.eclipse.jdt.internalpiler.lookup.BinaryTypeBinding.initializeTypeVariable(BinaryTypeBinding)中的org.eclipse.jdt.internalpiler.lookup.ReferenceBinding .java:927)

"Internal compiler error: java.lang.ClassCastException: org.eclipse.jdt.internalpiler.lookup.BaseTypeBinding cannot be cast to org.eclipse.jdt.internalpiler.lookup.ReferenceBinding at org.eclipse.jdt.internalpiler.lookup.BinaryTypeBinding.initializeTypeVariable(BinaryTypeBinding.java:927)"

我不知道这是什么意思。

which I have no idea what it means.

我想在scala中编写一些库,但也希望在Java中使用它。

I want to write some library in scala, but would also like it to be used in Java.

In我的scala类有返回scala List的方法,对于java代码使用它们,我有两个选择:

In my scala class there are methods that return scala List, for java code to use them, I have two options:

  • 使用scala直接在java中列出

  • use scala List in java directly

    编写一个包装类,为这些方法返回java.util.List。

    write a wrapper class that returns java.util.List for those methods.

    我更喜欢选项1 ,因为否则我将不得不为几乎所有我的scala类编写一个包装类。

    I'd rather like option 1, because otherwise I'll have to write a wrapper class for nearly ALL my scala classes.

    但是我无法在Java中运行scala List。

    But I just can't get scala List running in Java.

    推荐答案

    一个小的java端辅助方法可以解决这个问题:

    A little java-side helper method does the trick:

    import scala.collection.immutable.List; import scala.collection.immutable.List$; import scala.collection.immutable.$colon$colon; public class HelloScalaList { public static void main (String[] args) { List xs = list(1,2,3); System.out.println(xs); } public static <T> List<T> list(T ... ts) { List<T> result = List$.MODULE$.empty(); for(int i = ts.length; i > 0; i--) { result = new $colon$colon(ts[i - 1], result); } return result; } }

    [更新]

    由于这个问题,我开始了一个名为Scava的小项目,以支持从Java到Scala的调用: code.google/p/scava-org/

    As a result of this question, I started a little project called "Scava" in order to support calls from Java to Scala: code.google/p/scava-org/

  • 更多推荐

    我可以直接在Java中使用scala List吗?

    本文发布于:2023-11-14 20:14:19,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1588416.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:可以直接   Java   List   scala

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!