问题标签 [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 - 你如何让java方法注释在scala中工作
我有两个项目,一个 scala 项目和一个 java 项目。我的 scala 项目在构建路径中引用了 java 项目。在我的 java 项目中,我声明了以下注释:
在我的 scala 项目中,我正在注释一些方法。IE
在某个地方的另一个文件中,我试图提取注释。
不幸的是,annotations
总是一个空数组。我是在做一些根本错误的事情,还是我只是错过了一些小事?谢谢!
编辑
最初,我用 myAnnotation 两次注释 myMethod ,正如有人指出的那样,这是不正确的。事实证明这不是问题所在。我仍然得到一个空数组annotations
。没有异常被抛出。
scala - 如何在 Scala 中覆盖 Java varargs 方法?
我有一个用Java定义的方法,例如:
我需要在 Scala 中覆盖它,但这两个都给出错误:
错误指的是,<repeated...>
但我不知道那是什么。
更新
呃……没关系。我在 2.10.0 中,我输错了一些东西并且没有方法体。然后我被这个错误信息弄糊涂了,这对我来说仍然很奇怪。在 SBT 中:
问题是我visitTableSwitchInsn
只是缺少一个主体,但错误表明问题是可变参数的类型。
java - 混合 Scala 和 Java:如何正确获取泛型类型的构造函数参数?
我有一些遗留的 Java 代码在我无法控制的某个地方定义了一个通用payload
变量(即我无法更改它的类型):
我在我的代码中接收到这样一个payload
值作为方法参数,并希望将其传递给 Scala case class
(用作演员系统的消息),但没有正确定义,以至于我至少没有收到编译器警告.
这给出了编译器警告“类型安全:构造函数......属于原始类型......”
Scalacase class
定义为:
如何定义案例类以使代码编译干净?(遗憾的是,更改 JavaWrapper
类的代码或payload
参数的类型不是一种选择)
更新以阐明有效载荷参数的来源
添加为了比较,在Java中我可以定义一个参数,就像payload
定义变量一样:
并相应地调用它
但是我不能在没有得到“原始类型”警告的情况下直接实例化一个 Wrapper 对象。在这里,我需要使用一个static
辅助方法:
并使用这个静态助手来实例化一个Wrapper
对象:
解决方案
我可以向 Scala 伴生对象添加一个类似的辅助方法:
并从 Java 中使用它来实例化没有ScalaMessage
问题的类:
除非有人想出一个更优雅的解决方案,否则我会提取这个作为答案......
谢谢!
java - 如何使用java将集合转换转换为scala
下面的代码将类型列表转换为类型List<TestObj>
列表,其中类型List<List<String>>
中的每个列表元素List<List<String>>
都是大小为 1 的字符串列表。这是一种非常迭代的方法,可以使用 scala 将其转换为功能更强大的方法吗?一个可能的解决方案:模式匹配List<String>
,只为每个头元素创建一个新列表?
以下java代码的输出:
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 泛型差异的一般示例,以说明该问题。
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.Int
为java.lang.Integer
我使用scala.Int.unbox()
的 . 是连接方式吗?而且我不知道如何转换java.lang.Integer
为scala.Int
:在我输入的代码中伪代码SOME_TRANSFORMATION()
。这个 SOME_TRANSFORMATION 的正确实现是什么?
谢谢
java - 从 Java 中使用 scala.Either
我正在使用来自 java 的 scala 库,特别是一个返回Either[A, B]
. 在我的 java 代码中,我可以这样做:
result.right()
返回 a RightProjection
,但我无法在 Java 中导入它(使用 IntelliJ)。有没有一种正确的方法来处理 Java 中的 Either 对象?
scala - 如何从 Java 调用具有 Unit 返回类型的 PartialFunction 的 Scala 函数?
我正在尝试使用 oxbow_lakes 中描述的脚手架,在Java中实现 Scala PartialFunction 的最简单方法是什么?调用采用 PartialFunction 的 Scala 方法。这是我的 Scala 代码:
这就是我试图从 Java 中调用它的方式:
编译器告诉我:
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)
?
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>
?
谢谢