将 java.lang.Boolean 转换为 Scala Boolean [英] Convert java.lang.Boolean to Scala Boolean

查看:86
本文介绍了将 java.lang.Boolean 转换为 Scala Boolean的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am currently working on a Scala application which utilizes Spring-Boot and Swagger to send & receive REST-calls.

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

Swagger and Spring-Boot are pure Java-projects and have limited compatibility with Scala, but I seem to have found a workaround regarding the problem.

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

Since Spring-Boot and Swagger are handling requests as Java objects (which needs setters & getters to work), I'll have to treat the request as a Java object and convert the request to later. This is a very simplified version of what I did:

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 = 参数(假,真)

Test 1 = Params(false,true)

测试 2 = 参数(真,真)

Test 2 = Params(true,true)

测试 3 = 参数(假,假)

Test 3 = Params(false,false)

测试 4 = 参数(假,假)

Test 4 = Params(false,false)

测试 5 = 参数(假,真)

Test 5 = Params(false,true)

<小时>

好的……我的问题是:

有没有更简单的&实现这一目标的更具可读性的方式?我每次都必须调用 ParamsAsJava.toScala 还是有一些很棒 Scala 这样做的方法?

Is there an easier & more readable way of achieving this? Do I have to call ParamsAsJava.toScala each time or is there some awesome Scala way of doing this?

推荐答案

  1. 你不需要每次都写出java.lang.blah

ParamsAsJava(java.lang.Boolean.FALSE, java.lang.Boolean.TRUE)

只要使用

ParamsAsJava(false, true)

相反.自动装箱还没有消失.

instead. Autoboxing hasn't gone anywhere.

为了去掉toScala,在Params伴随对象中定义一个隐式转换:

to get rid of toScala, define an implicit conversion in Params companion object:

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

现在你可以写:

val test1: Params = ParamsAsJava(true, false)

当然,如果你没有在真空中定义这个变量,而是将它传递给一个方法,那么正确的类型将被自动推断,并且对象将被隐式转换.

and, of course, if you don't define this variable in vacuum, but pass it to a method instead, the right type will be inferred automatically, and the object will be converted implicitly.

def toScala()中无需使用括号(),该方法无副作用.

No need to use parens () in def toScala(), the method has no side effects.

这篇关于将 java.lang.Boolean 转换为 Scala Boolean的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆