如果String对象是不可变的(因此显然不能改变它的长度),为什么是length()一个方法,而不是简单地public final int length存在于数组中?
它只是一个getter方法,还是进行某种计算?
试着看看这背后的逻辑.
Yis*_*hai 19
Java是一种标准,而不仅仅是一种实现.不同的供应商可以以不同的方式许可和实施Java,只要它们符合标准即可.通过对字段进行标准调用,可以非常严重地限制实现,这是没有充分理由的.
对于课程的未来而言,方法也更灵活.除了在一些非常早期的Java类中,几乎从未完成将最终常量公开为一个字段,该字段可以与类的每个实例具有不同的值,而不是作为方法.
该length()方法早于 CharSequence接口,可能来自其第一个版本.看看效果如何.多年以后,没有任何向后兼容性的损失,CharSequence接口被引入并且非常适合.对于一个领域来说这是不可能的.
所以,让我们真正颠倒这个问题(当你设计一个几十年来保持不变的类时,你应该做什么):这里有什么领域,为什么不简单地把它作为一个方法?
这是封装的基本原则。
封装的一部分是类应该对其接口隐藏其实现(在接口的“契约设计”意义上,而不是在 Java 关键字意义上)。
你想要的是字符串的长度——你不应该关心它是否被缓存、计算、委托给其他字段等等。如果 JDK 人员想要改变未来的实现,他们应该能够做到这一点,而无需你必须重新编译。