有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

给定Scala选项Option[String]Option[Long]Option[Boolean]和给定的Java使用者Stringlongboolean,我希望在Java代码中通过静态类型检查干净地应用这些选项。 问题是,Option[Long]Option[Boolean]在Java代码中变成了Option<Object>,因此我需要一个未经检查的类型转换:

<T> void acceptIfDefinedPrimitive(Option<Object> option, Consumer<T> consumer) {
    if (option.isDefined()) {
        consumer.accept((T) option.get());
    }
}

我发现的另一个解决方案是针对每种基本类型的专用Scala函数:

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)
  }
}

但实际上,在Java方面,后两者看起来像acceptIfDefinedLong(Option<Object>, Consumer<java.lang.Long>),因此实际上没有严格的类型检查

  • 我该怎么做
  • 我怎样才能概括这一点
  • 我如何用Java编写这个
  • 有可能吗

必须可以从Java调用,并且不能有未检查的强制类型转换


共 (0) 个答案