当前位置: 首页 > 面试题库 >

将java.lang.Boolean转换为Scala布尔

须曜文
2023-03-14
问题内容

我目前正在开发一个Scala应用程序,该应用程序利用Spring-Boot和Swagger发送和接收REST调用。

Swagger和Spring-Boot是纯Java项目,与Scala的兼容性有限,但是我似乎找到了解决该问题的方法。

由于Spring-
Boot和Swagger将请求作为Java对象处理(需要使用setter和getter才能工作),因此我必须将请求视为Java对象,然后将请求转换为更高版本。这是我所做的工作的非常
简化的版本

case class ParamsAsJava(includeMovies: java.lang.Boolean = java.lang.Boolean.FALSE, includeTvShows: java.lang.Boolean = java.lang.Boolean.FALSE) {

  def toScala(): Params = {
    Params(
      includeMovies = convertToScala(includeMovies),
      includeTvShows = convertToScala(includeTvShows)
    )
  }

  private def convertToScala(test: java.lang.Boolean): Boolean
  = if (test == null) false else test.booleanValue

}

case class Params(includeMovies: Boolean = false, includeTvShows: Boolean = false)

object Application extends App {

  val test1 = ParamsAsJava(java.lang.Boolean.FALSE, java.lang.Boolean.TRUE).toScala
  val test2 = ParamsAsJava(java.lang.Boolean.TRUE, java.lang.Boolean.TRUE).toScala
  val test3 = ParamsAsJava().toScala
  val test4 = ParamsAsJava(null, null).toScala
  val test5 = ParamsAsJava(null, java.lang.Boolean.TRUE).toScala

  println(s"Test 1 = $test1")
  println(s"Test 2 = $test2")
  println(s"Test 3 = $test3")
  println(s"Test 4 = $test4")
  println(s"Test 5 = $test5")
}

输出值

测试1 =参数(false,true)

测试2 =参数(true,true)

测试3 = Params(false,false)

测试4 = Params(false,false)

测试5 = Params(false,true)

好吧…我的问题是:

有没有更简单,更易读的方式来实现这一目标?我是否必须每次都调用ParamsAsJava.toScala或是否有一些 很棒的
Scala方法来做到这一点?


问题答案:
  1. 您不需要java.lang.blah每次都写出
    ParamsAsJava(java.lang.Boolean.FALSE, java.lang.Boolean.TRUE)
    

只需使用

    ParamsAsJava(false, true)

代替。自动装箱一直没有到位。

  1. 要摆脱它toScala,请在Params伴随对象中定义一个隐式转换:
    object Params {
    

    implicit def params_j2s(p: ParamsAsJava): Params = p.toScala()
    }

现在您可以写:

    val test1: Params = ParamsAsJava(true, false)

当然,如果您不是在真空中定义此变量,而是将其传递给方法,则将自动推断出正确的类型,并且将隐式转换对象。

  1. 没有必要使用的括号()def toScala(),该方法没有副作用。


 类似资料:
  • 在我的项目中,我有一个Akka层,它返回一个,接收Future的部分是Java风格。 团队中的人不了解Scala,他们宁愿使用,因为他们更了解Java 8 API。 有没有什么好方法可以将一个转换成一个?。 显然是以非阻塞的方式。 当做

  • 我有一些scala代码是我用IntelliJ和SBT-Plugin编写的,希望提供给我作为C++的DLL的代码。 我已经尝试过使用'ikvmc':我通过'package'将所有类打包在一个jar中。之后,我手动设置了一个jar,其中包含我使用的所有依赖项(scala-library、scama、jamtio、jama)。不幸的是,我得到了很多警告:'IKVMC0119'、“Emitted java

  • 我试图从Scala类创建一个Dll。我正在使用IntelliJ和SBT。我已经找到了一种使用ikvm-converter将.jar文件转换为Dll的方法。现在的问题是:当我在SBT下使用“package”从我的.scala文件中创建一个.jar文件,然后尝试用ikvmc将其转换为Dll时,结果库在集成到C#中时是空的... 向你问好Christoph

  • 我有一个有30多个字符串的列表。如何将list转换为dataframe?我所尝试的:

  • 问题内容: 我需要在Java中实现一个返回Scala的方法。 但是我遇到这个错误: 到目前为止,这是我的代码: 但似乎没有提供将其转换为的可能性。 问题答案: 我需要JavaConverters来解决这个问题。

  • 参考[Stackoverflow]Scala:将map转换为case类我尝试复制其中一个响应,我看到以下错误: <代码>无法构造com的实例。实践斯卡拉。Test“(不存在任何创建者,如默认构造):无法从[源:未知;行:-1,列:-1]处的对象值(无委托或基于属性的创建者)反序列化 代码: 这个错误说明了什么?我错过了什么吗?