gpt4 book ai didi

kotlin - Kotlin 中 sealed 和 internal 有什么区别?

转载 作者:行者123 更新时间:2023-12-01 22:53:02 27 4
gpt4 key购买 nike

Kotlin 中 sealedinternal 有什么区别?我已经阅读了 Kotlin 关于密封类和可见性修饰符的文档;但是,我仍然不清楚何时使用 sealedinternal。也许有人可以提供真实世界的代码示例?

Sealed classes | Kotlin & Visibility modifiers | Kotlin资源。

最佳答案

sealed 类将在所有模块中可见,但只能在同一模块中扩展。这意味着如果你有这个:

sealed class MyClass {} 然后您可以在同一模块中执行此操作:

类 MyExtensionClass: MyClass() {}

但是你不能在另一个模块中做同样的事情。但是您仍然可以在另一个模块中同时使用 MyClassMyExtensionClass。例如,您可以在另一个模块中执行此操作:

val x: MyClass = MyExtensionClass()

您不能在同一个模块或另一个模块中直接实例化一个sealed 类。这意味着您无法在任何地方执行此操作:

val x = MyClass()

所以密封类基本上是一个抽象类,只能在同一个模块中实现。

internal 类可以像 sealed 类一样在同一模块中使用和扩展,但您不能在另一个模块中执行任何操作。所以你甚至不能在另一个模块中使用或实例化它。您也可以直接实例化一个 internal 类,只要您在同一模块中进行即可。

所以:使用sealed 来更好地控制扩展。例如,您创建了一个库,并且您希望使用该库中的一个类但不对其进行扩展。如果您不希望您的类对其他模块不可见,请使用 internal(您创建了一个库,但该库中的某些类甚至不应该直接在编译时供库用户使用)

密封类的一个很好的用例:

您构建了一个库并拥有一些具有多个不同实现的抽象类或接口(interface),但您希望确保库用户不会添加自己的实现(您不想控制实现细节)。

内部类的一个很好的用例:

您有一些接口(interface)和一个创建实现的工厂,但您不希望实现类在编译时对库用户可见。他们只是使用工厂,不需要担心实现。他们可能会构建自己的实现,因此不使用您提供的工厂,这没关系。

关于kotlin - Kotlin 中 sealed 和 internal 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73849830/

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