Java 在Kotlin返回的可能性
我经常遇到可选类和类似类选项的问题,请尝试,例如 假设我有一些可选的,如果它是空的,我想立即从一个方法毫无例外地返回,因为我的方法也返回可选的,所以getorelsetrow是不存在的,如果它存在,我想进一步处理它 公共可选转换器{ 可选opt=getSomething; 如果!opt.isPresent 返回可选的.empty; 字符串值=opt.get; //对值的某些操作,例如map和flatMap,会造成巨大的混乱 返回Integer.parseIntvalue; } 我只需要立即返回值,以防值为空,我无法执行map和flatMap链。所有的痛苦都在折磨着你,快点。有点像getOrElseThrow,但是用return代替throw会很好-getOrElseThrow。显然在Java中是不可能的,所以我想在Kotlin中尝试一下 娱乐安全可选:可选{ val extracted=Optional.of123 .getOrElseReturn{return Optional.empty} val modified=extracted.toInt*2 返回可选的.ofmodified } private inline fun Optional.getorelserentblock:Optional->T:T{ 返回if!this.isPresent 阻止这个 其他的 这个,拿着 } 令我大吃一惊的是,它确实满足了我的需求。如果我将Optional.of123更改为Optional.empty,它将立即从方法返回。但我不明白它是如何编译的 我的方法需要一个block:Optional->T,否则它将无法编译。所以在我的例子中,我有可选的,我需要传递一个block:Optional->String,但是,嘿,我的block离这个很近,它仍然可以编译,怎么编译 当我将块提取到变量时,它变成了val block:Optional->Nothing,我猜return语句是Nothing,它仍在编译,这让我更加惊讶Java 在Kotlin返回的可能性,java,kotlin,lambda,java-8,Java,Kotlin,Lambda,Java 8,我经常遇到可选类和类似类选项的问题,请尝试,例如 假设我有一些可选的,如果它是空的,我想立即从一个方法毫无例外地返回,因为我的方法也返回可选的,所以getorelsetrow是不存在的,如果它存在,我想进一步处理它 公共可选转换器{ 可选opt=getSomething; 如果!opt.isPresent 返回可选的.empty; 字符串值=opt.get; //对值的某些操作,例如map和flatMap,会造成巨大的混乱 返回Integer.parseIntvalue; } 我只需要立即返回值
顺便说一句,我知道这段代码严格来说不是我想要的-有人可以传递另一个块而无需非本地返回到该方法,但我认为没有其他方法可以将方法的第二部分提取到另一个私有方法中并调用getSomething.mapthis::otherPrivateMethod 如果getSomething中没有值,则不会调用它 基本上
public Optional<Integer> converter() {
return getSomething().map(this::privateConverter);
}
private Integer privateConverter(Integer integer) {
// some manipulations on value, such as map and flatMap would cause a huge mess
return Integer.parseInt(value);
}
将方法的第二部分提取到另一个私有方法中,并调用getSomething.mapthis::otherPrivateMethod 如果getSomething中没有值,则不会调用它 基本上
public Optional<Integer> converter() {
return getSomething().map(this::privateConverter);
}
private Integer privateConverter(Integer integer) {
// some manipulations on value, such as map and flatMap would cause a huge mess
return Integer.parseInt(value);
}
回答科特林部分:
fun safeOptional(): Optional<Int> {
val extracted = Optional.of("123")
.getOrElseReturn { return Optional.empty() }
.......
}
通常,在Kotlin中不需要可选的。您应该改用可为空的类型。您可以将它们与nullsafe运算符组合,例如Elvis运算符-?::
回答科特林部分:
fun safeOptional(): Optional<Int> {
val extracted = Optional.of("123")
.getOrElseReturn { return Optional.empty() }
.......
}
通常,在Kotlin中不需要可选的。您应该改用可为空的类型。您可以将它们与nullsafe运算符组合,例如Elvis运算符-?::
在Java代码中,为什么不能使用return-getSomething.mapInteger::parseInt?问题中有这么多文本,真正的问题似乎丢失了。在Java代码中,为什么不能使用return-getSomething.mapInteger::parseInt?问题中有这么多文本,真正的问题似乎丢失了。