Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java代码中将Java函数应用于Scala选项_Java_Scala_Primitive Types_Language Interoperability_Scala Option - Fatal编程技术网

如何在Java代码中将Java函数应用于Scala选项

如何在Java代码中将Java函数应用于Scala选项,java,scala,primitive-types,language-interoperability,scala-option,Java,Scala,Primitive Types,Language Interoperability,Scala Option,给定Scala选项Option[String],Option[Long],Option[Boolean]以及String,Long,Boolean的给定Java消费者,我想在Java代码中干净地应用这些选项,并进行静态类型检查。 问题是,Option[Long]和Option[Boolean]在Java代码中变成Option,因此我需要一个未选中的类型转换: <T> void acceptIfDefinedPrimitive(Option<Object> option,

给定Scala选项
Option[String]
Option[Long]
Option[Boolean]
以及
String
Long
Boolean
的给定Java消费者,我想在Java代码中干净地应用这些选项,并进行静态类型检查。 问题是,
Option[Long]
Option[Boolean]
在Java代码中变成
Option
,因此我需要一个未选中的类型转换:

<T> void acceptIfDefinedPrimitive(Option<Object> option, Consumer<T> consumer) {
    if (option.isDefined()) {
        consumer.accept((T) option.get());
    }
}
但实际上,在Java端,后两个看起来像
acceptIfDefinedLong(选项,Consumer)
,因此实际上没有严格的类型检查

  • 我该怎么做
  • 我怎样才能概括这一点
  • 我如何用Java编写这个
  • 有可能吗
必须可以从Java调用,并且不能有未检查的强制类型转换

def acceptIfDefined[T](option: Option[T], consumer: Consumer[T]):Unit = {
  if (option.isDefined) {
    consumer.accept(option.get)
  }
}

def acceptIfDefinedLong(option: Option[Long], consumer: Consumer[java.lang.Long]):Unit = {
  if (option.isDefined) {
    consumer.accept(option.get)
  }
}

def acceptIfDefinedBoolean(option: Option[Boolean], consumer: Consumer[java.lang.Boolean]):Unit = {
  if (option.isDefined) {
    consumer.accept(option.get)
  }
}