当前位置: 首页 > 知识库问答 >
问题:

有办法合并这2个kotlin函数吗?

巢睿
2023-03-14
import org.springframework.http.ResponseEntity

fun <T> responseEntity(block: (ResponseEntity.BodyBuilder) -> T): ResponseEntity<T> {
  val builder = ResponseEntity.ok()
  return builder.body(block(builder))
}

fun responseEntityVoid(block: (ResponseEntity.BodyBuilder) -> Unit): ResponseEntity<Void> {
  return ResponseEntity.ok().also(block).body(null)
}

如果将()->unit类型的参数传递给第一个函数,它将返回responseentity ,但不返回responseentity (在java接口中定义)

共有1个答案

高英彦
2023-03-14

我认为这是不可能的,因为t必须从lambda的返回类型推断出来。

也许用相同的函数名重载它就能达到你想要做的目的?它需要第三个函数来解析类型。@jvmname是避免重载歧义的必要条件。

我不使用Spring,也没有测试这个。类型有点陈腐。在ResponseEntityImpl中,它将单元lambda结果转换为空,因此body()返回的应该是ResponseEntity ,但编译器认为它是ResponseEntity 。public函数将其强制转换为responseentity

private fun <T: Any> responseEntityImpl(block: (ResponseEntity.BodyBuilder) -> T): ResponseEntity<T> {
    val builder = ResponseEntity.ok()
    return builder.body(block(builder).takeIf { it != Unit })
}

@Suppress("UNCHECKED_CAST")
@JvmName("responseEntityVoid")
fun responseEntity(block: (ResponseEntity.BodyBuilder) -> Unit): ResponseEntity<Void> {
    return responseEntityImpl(block) as ResponseEntity<Void>
}

fun <T: Any> responseEntity(block: (ResponseEntity.BodyBuilder) -> T): ResponseEntity<T> {
    return responseEntityImpl(block)
}
 类似资料:
  • 我试图在Kotlin中使用公共接口函数(正如我在Java中学习的那样)。 为此我创建了我的方法 据我记忆所及,我应该能做 但这似乎是不可能的(尽管可以使用modifier1.apply{input}) 阅读更多关于它的信息,我发现: Kotlin:如何将一个函数作为参数传递给另一个? 所以我把我的方法签名改为: 在这里我可以做 我可以这样叫福 哪里 到目前为止,这似乎是可能的,但将函数引用设为nu

  • 问题内容: 让我们看一个例子。 我需要合并这两个对象数组并创建以下数组: 有没有JavaScript或jQuery函数可以做到这一点? 不适合我 它返回 问题答案: 如果要在JavaScript中合并2个对象数组。你可以使用这一招 例如 输出:

  • Sonarqube只允许函数的7个参数。我有一个函数,它用8个参数组成字符串。 使此函数只有7个参数。我通过删除最后一个参数<code>dat</code>来拆分函数,但为了计算<code>dat</code>变量,我还需要<code>b</code>和<code>d</code>变量值。因此,在函数返回后,我需要<code>b</code>和<code>d</code>的值来计算<code>da

  • 我是kotlin的新手。我有一个带有2个重载方法的java类。一个接受一个函数,另一个接受两个 和 现在在kotlin中,我尝试使用两个参数调用版本(如java中): 但我得到编译错误。 Kotlin:意外标记(使用“;”在同一行上分隔表达式) 正确的语法是什么?

  • 问题内容: 我有2个数组 我是否可以将这些单独的数组合并为一个并将这些值相加,以便结果为: 这是我目前拥有的功能,但我似乎无法使其工作: 问题答案: 可以用两行代码完成此实际计算,而无需循环: http://codepad.viper-7.com/ieSkHQ 您只需要进行适当的调整即可解决您的嵌套结构。

  • 我得合并两个DF。一个是我的主df,另一个有很多NaN 合并应该只是“忽略”NaN值,并且只在列值不是NaN的地方合并。我尝试了不同的方法,但是df2中的数据有几十种可能出现NaN值。df1有168K行,df2大约有170行,应该与任何与所有非NAN值匹配的相关联。有人知道如何有效地做到这一点吗? 经过对不同方法的广泛研究,似乎一个“神奇”的方式忽略NaNs可能是不存在的。我想在df2上应用一个掩