gpt4 book ai didi

kotlin - Kotlin 的 DAO 应该返回 Optional 还是 null?

转载 作者:IT老高 更新时间:2023-10-28 13:42:24 24 4
gpt4 key购买 nike

在 Kotlin/JPA 之前,我曾经这样编写我的 DAO 层:

public interface UserDao extends JpaRepository<User,Long> {
Optional<User> findBySsn(String ssn);
}

在调用方,如果我想通过 SSN 找人或创建用户,我可以这样写:

val user = userDao.findBySsn(value).orElseGet {
userDao.save(value)
}

效果很好,看起来很流畅。

但由于 Kotlin 引入了 null-safety ,还有另一种惯用的方式(dao 仍在 Java 中):

public interface UserDao extends JpaRepository<User,Long>  {

Optional<User> findBySsn(String ssn);

@Query("select u from User u where u.ssn = :ssn")
@Nullable User findBySsnNullable(@Param("ssn") String ssn)
}

在客户端:

val user = userDao.findBySsnNullable(value)
.takeIf{ it -> it != null}? : userDao.save(User(value))

这两种方式都很好。但我想知道哪个是首选? Kotlin 在 API 设计中依赖 Java8 的 Optional 有好处吗? Kotlin 项目依赖(或通过)Java8 的 Optional/Stream API(因为 Kotlin 有自己的)有什么缺点?

Kotlin 可以编译成 JavaScript(我没研究过)。如果项目依赖Java的Optional/Stream,编译成JS会不会有问题?

----更新----

根据Jetbrains

No, common code can only depend on other common libraries. Kotlin has no support for translating Java bytecode into JS.

最佳答案

如果您不需要,我不会使用 Optional。它只会增加不必要的开销,因为在 Kotlin 中使用可空类型更具可读性和惯用性。在 Kotlin 中使用 Optional 没有任何优势。

这里有另一个讨论:https://discuss.kotlinlang.org/t/java-api-design-for-kotlin-consumption-optional-or-null/2455

关于kotlin - Kotlin 的 DAO 应该返回 Optional 还是 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47529644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com