标签: scala-java-interop

将“ String *”(Scala)与“ String ...”(Java)相互转换

我正在将一些Elasticsearch Java API转换为Scala。Java中有一些采用类型为变量的方法String... indices,因此我试图为Scala函数提供类型为变量的函数,该函数indices: String*封装了该Java方法。我没有找到转换String*为的方法String...

我感谢您的帮助。

java scala variadic-functions scala-java-interop

1
推荐指数
1
解决办法
66
查看次数

为 Scala 类创建一个空构造函数

如果我有一个这样的案例类:

case class Foo(s : String, k : Int)
Run Code Online (Sandbox Code Playgroud)

如何为此指定一个空的构造函数?我需要这个的原因是因为我想将这个类的值传递给一个 Java API,它要求该类有一个空的构造函数。我是否为此指定默认值?我想我必须这样做,我别无选择。

constructor scala scala-java-interop

1
推荐指数
1
解决办法
102
查看次数

在java中访问scala类字段

我已经A在 Scala 中定义了这个类:

class A(var number: Int)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试number在 java 中访问其成员字段时,出现错误:

A a = new A();
a.number = 4;
Run Code Online (Sandbox Code Playgroud)

结果:java: number has private access in A。如果我尝试number从 Scala访问,则没有问题。

我该怎么做才能解决这个问题?

java scala scala-java-interop

1
推荐指数
1
解决办法
99
查看次数

空Java列表到Scala缓冲区

想象一下我有一个Java列表

val javaList: java.util.List[String] = null
Run Code Online (Sandbox Code Playgroud)

如果我想将其用作scala集合,比如说Buffer,我只需添加以下导入(如之前多次描述)

import scala.collection.JavaConversions._
Run Code Online (Sandbox Code Playgroud)

问题是我必须检查列表是否不同于null。这将不起作用:

javaList foreach println          //throws java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以将java列表转换为scala集合,从而将null转换为Buffer.empty?与Option工厂相似:

Option(null)                      //> res0: Option[Null] = None
asScalaBuffer(javaList)           // I wish this to be ArrayBuffer()
Run Code Online (Sandbox Code Playgroud)

scala scala-java-interop

0
推荐指数
1
解决办法
1480
查看次数

如何将列表连接到scala中的另一个列表

在这里,我用来连接2个列表(使用相同的类型) :+

代码是 testResult:+ studentsearch

列表长度在控制台获得

调节器

@RequestMapping(value = Array("parent/ViewReports.html"))
 def viewReportPage(test: Test): String = {    

    var userAccount: UserAccount = secService.getLoggedUserAccount
    var z = userAccount.getId().toLong
    var studentsearch: java.util.List[StudentTest] = Nil
    var studentTestResult: java.util.List[StudentTest] =Nil
    var testResult: java.util.List[StudentTest] =Nil      

    var searchstudent = parentStudentService.findParentStudentByParent(z)

    for(srchStd <- searchstudent){    
      var sid= srchStd.getStudent().getId()  
      studentsearch = studentTestService.findAllStudentTestByStudent(sid)
    }

    testResult :+ studentsearch 
    println("Length:" +testResult.length)  
    studentTestResult = ListBuffer(testResult: _*)    .
    results = studentTestResult

    "redirect:/parent/result.html"
}
Run Code Online (Sandbox Code Playgroud)

连接代码是错误的?

请分享你的答案

scala list concatenation scala-java-interop

0
推荐指数
1
解决办法
565
查看次数

Scala SBT 和 scala-library.jar 文件包含

当我尝试包含scala jar在我的java server应用程序中时,我收到错误

java.lang.NoClassDefFoundError: scala/ScalaObject
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
Run Code Online (Sandbox Code Playgroud)

这意味着我需要将其包含scala-library.jar在我的CLASSPATH sbt 构建过程中是否有任何方法可以将其包含在targetjar 中。

java scala scala-java-interop

0
推荐指数
1
解决办法
1283
查看次数

无法将返回的java.util.ArrayList分配给scala.collection.mutable.ArrayBuffer.为什么?

我导入了这个:

import scala.collection.JavaConversions._

val size: Int = blubb.getSize
var fields: ArrayBuffer[Field] = new ArrayBuffer[Field]

size match
{
    case 1 => fields.append(field)
    case 2 => fields = field.getNeighbours)
}
Run Code Online (Sandbox Code Playgroud)

现在getNeighbours返回一个java.util.ArrayList而不是一个ArrayBuffer(它是一个我无法控制的Java类).

编译说

ArrayList [Field]类型的表达式不符合预期类型ArrayBuffer [Field]

JavaConversions不应该处理这个吗?如何轻松地将ArrayList转换为ArrayBuffer?(我不想在Scala代码中用ArrayList替换ArrayBuffer!)

java collections scala scala-java-interop

0
推荐指数
1
解决办法
650
查看次数