Java 词汇的起初斯特默将“const”URL做为解释器。但该名词仍未同时实现,所以很可能将总有一天无法同时实现。此种情形让很多开发者想晓得为何。
让他们更多地介绍 Java 中的“const”URL和描述语言中自表达式的许多代替方式。
Java 中的“const”是甚么原意?
任何人看完 Java 中的“const”URL的人单厢从逻辑上假定其起初的企图是表述两个自表达式值。那个假定无法太吓人。
市场竞争词汇 C 和 C++ 都采用“const”URL,但那些词汇绝非单纯面向第一类。难题就在这儿。在 Java 中,做为“const”的小东西究竟意味著甚么?
维持维持不变与否意味著示例表达式无法发生改变?
维持维持不变与否意味著类表达式无法发生改变?
自表达式与否意味著第一类的方式无法被全面覆盖?
维持维持不变与否意味著第一类提及无法发生改变?
静止与否意味著第一类是不容变的?
考虑到前述大部份难题,另两个大难题是假如两个第一类仅在这类情形下是静止的?
比如,这类词汇容许“const”做为方式亲笔签名的一小部分,这说明第一类或其特性在方式内采用的短时期内无法更动。这有时候被称作自表达式精确性。词汇CTO在检查和那些各项任务并企图确认“const”URL的涵义时,最后可能将会陷于两个深深地的小鸡洞。
Java 的“final”与“const”URL
在 Java 中起初可能将采用“const URL”解决的很多用例采用 Java 的“final”URL已经足够解决了。在 Java 中,“final”用于:
将原始值标记为自表达式;
表示方式无法被全面覆盖;
指定第一类提及无法更动;
确保表达式在方式中维持不变。
当“static”和“final”URL组合时,可以使类级表达式维持维持不变。虽然这并没完全涵盖在其他词汇中采用“const”URL的大部份不同场景,但它已经接近了。此外,将“静态”和“最后”组合在一起的选择为自表达式特性的行为方式提供了更大的灵活性,而不是仅采用两个URL来尝试解决示例和类级别的语义。
当开发者考虑词汇通过容许将“static”和“final”URL菊花链在一起而提供的功能和灵活性时,人们可能将会推断 Java 中未同时实现“const”URL的原因是因为它不需要。与 Java 中的“const”URL的实现相比,“static”和“final”URL的组合有效且可以说提供了一种更具表现力的方式来声明维持不变的表达式。
不容变第一类
就完全不容变的第一类而言,历史上的解决方式是将示例表达式声明为私有并通过公共 setter 和 getter 限制访问。最近,Java 引入了值类型的概念做为 JEP 169 的一小部分。这将为该词汇添加不容变、无提及的第一类,并再次提供一种 Java 词汇语法来同时实现很多与“const”相关的概念。
关于在 Java 中采用“const”URL来同时实现 const 精确性的讨论始于 1999 年。但是,增强提案被拒绝为特性蠕变。词汇CTO断言,在完全增量之后在 Java 中添加 const 同时实现——JDK 的长期支持版本已经推出——将导致代码膨胀,并且可能将存在向后兼容性难题,从而完全扼杀了那个概念。从那以后,在 Java 中同时实现“const”URL的想法就再也没被重新审视过。
Java 中的 const URL无法在不导致编译时错误的情形下采用。
为何“const”没在 Java 中同时实现?假如没同时实现它的企图,为何要让const成为解释器呢?
两个可能将的原因是避免混淆。假如“const”不是解释器,则容许开发者采用该短语来命名表达式。试想一下,对于学习采用“const”同时实现的词汇进行编程的 C++ 和 JavaScript 开发者来说,这可能将会造成多大的困惑。简单地将 Java 中的“const”URL设为解释器有助于避免任何人混淆。
为何 Java 中的“const”是没同时实现的解释器?
同样,这主要是为了避免混淆。其他URL提供了等效的功能,并且因为该概念不适合面向第一类的范例。或者用外行的话来说,Java 不需要它。
在大多数情形下,因为 JDK 不需要它,“const”在 Java 中没同时实现。其他词汇特性提供声明自表达式或提供维持不变性的能力。该词汇的提供者希望避免混淆,并决定即使是善意的开发者也无法在他们的代码中采用该名词。