问题标签 [scala-java-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JavaConverters asScala 方法的时间复杂度
从 Scala 2.9 版开始,有一个方便的转换器,可以java.util.List
通过编写如下内容将其他集合转换为 Scala 的数据结构:
这是一个可爱的小功能,因为它允许人们在与现有 Java 代码交互时利用 Scala 的优势。
但是,我不确定所涉及的时间和空间复杂性,并且在官方文档中找不到任何内容,因此,以下问题:
我在哪里可以获得有关 JavaConverters 的复杂性(时间和空间)的信息?
scala - 如何为带有可选字段的案例类创建一个 Java 友好的 API
我在 Scala 中创建了一些用于持久化数据 mongodb 的案例类。客户端应用程序是用 Java 编写的,并通过传入这些案例类的实例来使用我的存储库。
它工作正常,除非我使用可选字段:
现在从Java我不想引用Scala的选项,所以我宁愿重写一个允许客户端调用类似的构造函数
伴随对象的工厂方法也可以。我正在寻找一种解决方案,它允许我在没有任何 scala 依赖的情况下编写 Java,最好不要比调用构造函数更复杂。想法?
java - 从 Java 访问 scala.None
如何scala.None
从 Java 访问?
最后一行导致编译器因“type scala.None 不带参数”而死机。
这失败了“找不到符号构造函数None()”:
这失败了“找不到符号变量无”:
在 2007 年,这曾经奏效,但后来 Scala 发生了变化。Java 编译器给出error: incompatible types
:
scala - Scala:处理Java库异常的最佳方法?
假设我正在使用 Scala 项目中的 Java 库。那个 Java 库到处都抛出异常,但我觉得让它们“在 Scala 世界中”传播并不自在,因为无法确定 Scala 方法可以抛出哪些异常(除非通过记录它们)。所以这是我倾向于写的那种代码:
然后,通常,我将使用Either.RightProjection.flatMap
链接返回的方法Either[Throwable, ...]
或Either.RightProjection.map
混合返回的方法Either[Throwable, ...]
和其他方法。或者只是Either.fold
做一些Throwable
有价值的事情。但是,不知何故,这仍然感觉不完全正确。
这是在 Scala 中处理 Java 异常的最“惯用”方式吗?没有更好的方法吗?
scala - 如何使用 javap 从 Java 中学习使用 scala.None?
在之前的问题Accessing scala.None from Java中,似乎人们已经习惯于javap
弄清楚如何scala.None
从 Java 进行访问。我想知道他们是怎么做到的。仅供参考,答案是:
可以短接为:
给定这个程序 ( OptionTest.scala
):
我是这样跑javap
的:
这是javap
输出的一部分:
我还在scala.None
和上运行了 javap scala.Option
。如何从javap
输出中得出:
None
None.type
是扩展的唯一类型对象Option
- 伴随对象的
apply()
方法是必需的
?
java - 无法在 Java 中使用 Scala 类
我相信 Scala 和 Java 可以互相使用类。
但是,我发现自己的 Java 类不能在同一个包中使用 Scala 类。
scala 类定义为:
尝试使用这段代码的代码是:
我得到的错误是:
有人可以给我一些提示吗?
非常感谢
scala - Scala:从java接口重写方法
我正在尝试在 scala 中实现一个通用的 java 接口。我看过: 如何在 Scala 中扩展包含泛型方法的 Java 接口? 和Scala:覆盖通用 Java 方法 II
但我仍然找不到答案。这是来自 Spring web 的方法签名:
我在scala中尝试了以下内容:
但是我得到一个错误,说这个方法没有覆盖任何东西。如果我通过执行以下操作擦除类型:
它将方法标记为被覆盖。我的问题是如何在这里保持类型安全并强制它覆盖接口方法?
问候
编辑
弹簧接口:
java - 自动将 Scala 代码转换为 Java 代码
我有一个用 Scala 编写的应用程序,我的一些团队成员想要它的 Java 版本。这是一个使用另一个用 Scala 编写的 API 的演示应用程序,他们希望该应用程序的 Java 版本能够使用 Java 中的 API。但是,该应用程序有点大,我不想在 Java 中手动重写(他们也不想学习 Scala)。是否有任何工具可以从 Scala 代码自动生成(可读)Java 代码?
java - Java 静态类成员和 Scala 互操作性
来自Scala 编程语言概述,第二版:
在上面的示例中,Scala 程序调用方法
startsWith
和substring
ofString
,这是在 Java 中定义的类。它还访问out
Java 类的静态字段System
,并调用其(重载)println
方法。即使 Scala 没有静态类成员的概念,这也是可能的。事实上,每个 Java 类在 Scala 中都被视为两个实体,一个包含所有动态成员的类和一个包含所有静态成员的单例对象。
我了解将 Scala 的伴随对象翻译成 Java 字节码,但我不确定对于相反的示例(从 Java 到 Scala) ,上部块引用中的粗体文本“在 Scala 中看到”到底是什么意思。
这是否意味着具有静态成员的 Java 类实际上被转换或只是解释为 Scala 中的两个实体?还是我的两个假设都是错误的?
java - 如何在 Java 代码中使用 Scala 可变参数
有很多关于从 Scala 代码调用 Java varargs 的文章,但我唯一能找到相反的方法是这个问题:Using scala vararg methods in java,它没有任何具体的例子。
我正在尝试使用scala.Console
一些 Java 代码,因为它java.io.Console
在 Eclipse 中不起作用,而 Scala 则可以。但我无法获得方法
工作,因为它似乎期待scala.collection.Seq[Any]
第二个参数,我不知道如何 Seq
在 Java 中创建。我该如何解决这个问题?
我尝试过的事情:
1)使用空
- 获得奖励NullPointerException
。
2) 替换了null
with scala.collection.Seq.empty()
,但是 javac 报各种错误,比如Seq
没有empty
方法。
3)使用包对象Nil
中的对象,但是这里scala.collection.immutable
建议的语法是,但无法解决。scala.collection.immutable.package$Nil$.MODULE$
当然我可以只使用readLine()
不带可变参数的方法,但这太容易了。