gpt4 book ai didi

java - 为什么 Kotlin 类默认是 final 而不是 open?

转载 作者:行者123 更新时间:2023-11-30 06:43:45 25 4
gpt4 key购买 nike

文档告诉我们以下有关 open 注释的信息:

The open annotation on a class is the opposite of Java's final: itallows others to inherit from this class. By default, all classes inKotlin are final, which corresponds to Effective Java, 3rd Edition,Item 19: Design and document for inheritance or else prohibit it.

我的课

class Foo //I can't inherit it
open class Bar //I can inherit it

默认情况下保持所有类 final 的真正动机是什么?性能有提升吗?或者它只是一种设计模式?为什么默认禁止打开

最佳答案

对我来说有两个原因:

首先,Kotlin 从函数式编程世界中吸取了许多想法,并尽可能频繁地使用不变性来避免所有 known problems with mutation .

因此,默认情况下将每个类声明为“final”(至少对我而言)是相似的。

该类在运行时不能更改或更改(使用反射之类的东西),这会使 Kotlin 编译器的安全检查变得无用。

所以如果你想“改变”一个类的默认实现,你必须明确地将它标记为打开。

我想到的第二个想法是继承经常被滥用。解释了常见陷阱的一些示例 here

有原则“Favor composition over inheritance”作为更好设计的指南。因此,默认情况下将每个类声明为 final 会迫使开发人员至少停下来考虑一下解决问题的替代方法,而不是出于错误的原因使用继承。

但只要没有 kotlin 开发人员的官方声明,我只能给出一个自以为是的答案。

关于java - 为什么 Kotlin 类默认是 final 而不是 open?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51680006/

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