使用Kotlin的扩展功能抑制返回值

时间:2019-11-25 06:29:07

标签: kotlin kotlin-extension

我在Spring Boot应用程序中使用Kotlin。特别是在服务中,我发现某些功能需要禁止从存储库中返回值。例如,下面是一个save(),它保存实体而不返回持久化的实体ID:

fun save(person: Person) {
    personRepository.save(person)
}

如您所见,该函数只是将调用委派给JpaRepository#save(...),并且不返回任何内容。我想做的是这样的:

fun save(person: Person) = personRepository.save(person)

为此,我创建了一个扩展功能:

fun Any.ignoreReturn() = Unit

,然后以以下方式调用`personRepository#save(...):

fun save(person: Person) = personRepository.save(person).ignoreReturn()

我想知道的是:

  1. 这是正确的方法吗?
  2. 我正在扩展Any的扩展功能是否有副作用?

1 个答案:

答案 0 :(得分:1)

一种方法可能是这样:

onFormSubmit

重要的部分是声明要返回Unit的函数,因此从end1 = "C" end2 = "h" end3 = "e" end4 = "e" end5 = "s" end6 = "e" end7 = "B" end8 = "u" end9 = "r" end10 = "g" end11 = "e" end12 = "r" burger = end1 + end2 + end3 + end4 + end5 + end6 + end7 + end8 + end9 + end10 + end11 + end12 print(burger) 生成的代码将不需要返回if ($date instanceof DateTimeInterface) { $instance = static::instance($date); $instance::setLastErrors($lastErrors); return $instance; } if (static::isStrictModeEnabled()) { throw new InvalidArgumentException(implode(PHP_EOL, $lastErrors['errors'])); } return false; } 返回的内容。您可以对其进行测试,只需删除fun save(person: Person): Unit = let { personRepository.save(person) } 部分,您的保存功能就会获得不同的签名。