如何在Java代码中将Java函数应用于Scala选项
给定Scala选项Option[String]
、Option[Long]
、Option[Boolean]
和给定的Java使用者String
、long
、boolean
,我希望在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) 个答案