给定 Scala 选项Option[String]
,Option[Long]
和Option[Boolean]
给定 Java 消费者String
, long
,boolean
我想在 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 调用,并且不能有未经检查的强制转换。