问题标签 [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.

0 投票
1 回答
2920 浏览

java - 你如何让java方法注释在scala中工作

我有两个项目,一个 scala 项目和一个 java 项目。我的 scala 项目在构建路径中引用了 java 项目。在我的 java 项目中,我声明了以下注释:

在我的 scala 项目中,我正在注释一些方法。IE

在某个地方的另一个文件中,我试图提取注释。

不幸的是,annotations总是一个空数组。我是在做一些根本错误的事情,还是我只是错过了一些小事?谢谢!

编辑 最初,我用 myAnnotation 两次注释 myMethod ,正如有人指出的那样,这是不正确的。事实证明这不是问题所在。我仍然得到一个空数组annotations。没有异常被抛出。

0 投票
1 回答
963 浏览

scala - 如何在 Scala 中覆盖 Java varargs 方法?

我有一个用Java定义的方法,例如:

我需要在 Scala 中覆盖它,但这两个都给出错误:

错误指的是,<repeated...>但我不知道那是什么。

更新

呃……没关系。我在 2.10.0 中,我输错了一些东西并且没有方法体。然后我被这个错误信息弄糊涂了,这对我来说仍然很奇怪。在 SBT 中:

问题是我visitTableSwitchInsn只是缺少一个主体,但错误表明问题是可变参数的类型。

0 投票
2 回答
1821 浏览

java - 混合 Scala 和 Java:如何正确获取泛型类型的构造函数参数?

我有一些遗留的 Java 代码在我无法控制的某个地方定义了一个通用payload变量(即我无法更改它的类型):

我在我的代码中接收到这样一个payload值作为方法参数,并希望将其传递给 Scala case class (用作演员系统的消息),但没有正确定义,以至于我至少没有收到编译器警告.

这给出了编译器警告“类型安全:构造函数......属于原始类型......”

Scalacase class定义为:

如何定义案例类以使代码编译干净?(遗憾的是,更改 JavaWrapper类的代码或payload参数的类型不是一种选择)

更新以阐明有效载荷参数的来源

添加为了比较,在Java中我可以定义一个参数,就像payload定义变量一样:

并相应地调用它

但是我不能在没有得到“原始类型”警告的情况下直接实例化一个 Wrapper 对象。在这里,我需要使用一个static辅助方法:

并使用这个静态助手来实例化一个Wrapper对象:

解决方案

我可以向 Scala 伴生对象添加一个类似的辅助方法:

并从 Java 中使用它来实例化没有ScalaMessage问题的类:

除非有人想出一个更优雅的解决方案,否则我会提取这个作为答案......

谢谢!

0 投票
1 回答
165 浏览

java - 如何使用java将集合转换转换为scala

下面的代码将类型列表转换为类型List<TestObj>列表,其中类型List<List<String>> 中的每个列表元素List<List<String>>都是大小为 1 的字符串列表。这是一种非常迭代的方法,可以使用 scala 将其转换为功能更强大的方法吗?一个可能的解决方案:模式匹配List<String>,只为每个头元素创建一个新列表?

以下java代码的输出:

0 投票
1 回答
2061 浏览

java - Scala 和 Java 泛型——提取和返回嵌套类型

Java 泛型可以根据表达式的返回类型推断泛型类型参数的类型。考虑以下:

我们可以这样称呼它:

这将编译但RuntimeException在调用时抛出 a ,因为它会尝试将a 强制Map转换为 aString但失败。但关键是 Java<T>根据调用点的预期结果类型推断出 的值。

我们也可以在 Scala 中这样做:

到目前为止,一切都很好。

Java 还可以从嵌套定义中推断类型参数并返回这些参数(即,在使用它之前,我们实际上不必将结果分配给一个类型来使用它;Java 知道它已经是什么。)

一个简单的类显示这个:

但是,在 Scala 中,此类会导致问题。REPL:

这两个调用为允许它们工作put()的类型参数指定一个值V,但是一旦V需要从参数的继承中提取K参数,事情就会崩溃。Java 代码没有这样的问题。

让 Scala 不抱怨的唯一方法是显式定义类型:

(对于像上面这样简单和做作的事情,它有点好(违反 DRY),但对于更复杂的事情,比如斯坦福核心 NLP API,你必须做类似的事情:

其中包括手动查找嵌套类型以便添加它们,这非常痛苦。)

问题:

有没有办法让它工作而不必如此冗长地指定类型参数?更重要的是,为什么这是一个问题?当 Scala 不是时,Java 如何能够推断类型参数?

编辑 1:删除了大部分演示斯坦福核心 NLP 问题的代码,并将其替换为 Scala/Java 泛型差异的一般示例,以说明该问题。

0 投票
2 回答
3476 浏览

java - 在 Java 中实例化 scala.Int

我正在为 Play 2 框架的SecureSocial插件编写持久层。我在https://github.com/play-modules/modules.playframework.org/blob/master/app/models/ss/MPOOAuth2Info.java找到了一个示例:

但是 API 已更改,因此我无法使用securesocial.core.java.OAuth2Info. SecureSocial 是由 Scala 编写的,这个类是一个 Java 前端。所以我决定直接在哪里使用 Scala:

我的结果:

scala.Int但是我在类型转换方面遇到了问题java.lang.Integer。转换scala.Intjava.lang.Integer我使用scala.Int.unbox()的 . 是连接方式吗?而且我不知道如何转换java.lang.Integerscala.Int:在我输入的代码中伪代码SOME_TRANSFORMATION()。这个 SOME_TRANSFORMATION 的正确实现是什么?

谢谢

0 投票
2 回答
1185 浏览

java - 从 Java 中使用 scala.Either

我正在使用来自 java 的 scala 库,特别是一个返回Either[A, B]. 在我的 java 代码中,我可以这样做:

result.right()返回 a RightProjection,但我无法在 Java 中导入它(使用 IntelliJ)。有没有一种正确的方法来处理 Java 中的 Either 对象?

0 投票
1 回答
280 浏览

scala - 如何从 Java 调用具有 Unit 返回类型的 PartialFunction 的 Scala 函数?

我正在尝试使用 oxbow_lakes 中描述的脚手架,Java中实现 Scala PartialFunction 的最简单方法是什么?调用采用 PartialFunction 的 Scala 方法。这是我的 Scala 代码:

这就是我试图从 Java 中调用它的方式:

编译器告诉我:

0 投票
1 回答
6395 浏览

scala - 在 Scala 2.10 中获取 java.lang.Class[T] 的 Scala 类型

我正在查看scala 反射概述,我想知道是否可以java.lang.Class<T>在 Scala 2.10 中使用 a 作为类型。

是否可以在不更改其签名的情况下实现该parse[T](clazz: Class[T]): ru.Type方法以便能够从 java 调用它new Reflector().parse(String.class)

0 投票
1 回答
1308 浏览

scala - 转换列表进入序列[(字符串,字符串)]

我想使用@helper.select表单 Play 2 模板引擎,我应该在其中指定Seq[(String,String)]包含<options>. 但我有List<Enum>。而且我对 Scala 的了解相当微弱。

如果没有这个助手,我<select>使用以下代码填充:

以及类别的定义:

对于测试,我在 Play2 中使用了options = options("1" -> "1", "2" -> "2", "3" -> "3", "4" -> "4", "5" -> "5")inputRadioGroup的 Java 示例

我怎样才能Seq[(String,String)]从我的List<Enum>?

谢谢