2

给定 Scala 选项Option[String],Option[Long]Option[Boolean]给定 Java 消费者String, longboolean我想在 Java 代码中通过静态类型检查干净地应用这些。问题是,Option[Long]Option[Boolean]成为Option<Object>Java 代码,所以我需要一个未经检查的类型转换:

<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 调用,并且不能有未经检查的强制转换。

4

0 回答 0