怎么自己做推广网站,免费微网站建站系统,什么是企业邮箱怎么申请,云企网站Pun打算……让我们讨论Java final 。 最近#xff0c;我们广受欢迎的博客文章“编码Java时的十个微妙的最佳实践”在JavaWorld的摘要和链接中有了很大的复兴#xff0c;并提出了一组新的评论。 尤其是#xff0c;JavaWorld编辑对我们对Java关键字“ final ”的观点提出了质… Pun打算……让我们讨论Java final 。 最近我们广受欢迎的博客文章“编码Java时的十个微妙的最佳实践”在JavaWorld的摘要和链接中有了很大的复兴并提出了一组新的评论。 尤其是JavaWorld编辑对我们对Java关键字“ final ”的观点提出了质疑 更有争议的是Eder提出了默认情况下使方法最终化是否安全的问题 “如果您完全控制所有源代码则默认情况下将方法定为final绝对没有问题因为” “如果确实需要重写方法真的吗您仍然可以删除final关键字” “您再也不会意外覆盖任何方法了” 确实是的。 默认情况下所有类方法字段和局部变量都应为final并且可以通过关键字进行更改。 以下是字段和局部变量 int finalInt 1;
val int finalInt 2;
var int mutableInt 3; 是否确实需要使用Scala / C样式的val关键字仍有待商.。 但是很显然为了再次修改字段/变量我们应该有一个明确允许它的关键字。 方法相同–我使用Java 8的default关键字来提高一致性和规则性 class FinalClass {void finalMethod() {}
}default class ExtendableClass {void finalMethod () {}default void overridableMethod() {}
} 在我们看来那将是一个完美的世界但是Java却采取了另一种方式将default 可覆盖可变默认和final 不可覆盖不可变显式选项。 公平地说我们会忍受的 …作为API设计人员当然来自jOOQ API我们会很乐意将final放在final 至少假装Java具有上述更明智的默认值。 但是许多人不同意这种评估主要原因是 作为主要在osgi环境中工作的人我不能完全同意但是您可以保证其他api设计人员也有同样的感觉吗 我认为最好是先限制api设计人员的错误而不是先限制用户可以默认扩展的范围以取代用户的错误。 – eliasv在reddit上 要么… 强烈反对。 我宁愿从公共图书馆禁止final和private。 当我真的需要扩展某些东西而无法完成时这是一种痛苦。 故意锁定代码可能意味着两件事要么糟透了要么完美。 但是如果它是完美的那么没有人需要对其进行扩展那么为什么要关心它。 当然存在使用final的正当理由但是担心用新版本的库破坏某人并不是其中之一。 – 在reddit上的meotau 还是... 我知道我们已经对此进行了非常有用的讨论但只是在此线程上提醒其他人关于“最终”的许多争论都取决于上下文这是公共API还是内部代码 在前一种情况下我同意有一些很好的论据可以说是最终的。 在后一种情况下最终几乎总是一个糟糕的主意。 – Charles Roth在我们的博客上 所有这些论点都倾向于朝一个方向发展“我们正在开发糟糕的代码因此我们至少需要一些解决方法来减轻这种痛苦。” 但是为什么不这样想呢 以上所有人员都想到的API设计人员将精确创建您想通过扩展进行修补的可怕API。 碰巧的是除非Java语言要求否则相同的API设计人员不会考虑关键字final的有用性和可通信性因此永远不会使用它。 双赢尽管糟糕的API不稳定的解决方法和补丁程序。 希望将final用于其API的API设计人员将在如何正确设计API以及定义明确的扩展点/ SPI方面反映出很多内容从而使您永远不必担心final是什么。 同样双赢和一个很棒的API。 此外在后一种情况下奇怪的黑客将不会被黑客入侵和破坏您的API而这只会导致痛苦和痛苦但这并不是真正的损失。 最终界面方法 由于上述原因我仍然深感遗憾Java 8接口中的final是不可能的。 布莱恩·格茨Brian Goetz做出了出色的解释为什么如此决定。 实际上是通常的解释。 关于这一点不是改变的主要设计目标 但是如果我们有以下条件请考虑语言的一致性和规律性 default interface ImplementableInterface {void abstractMethod () ;void finalMethod () {}default void overridableMethod() {}
} 鸭子和奔跑… 或者更现实地说我们的默认值为default interface ImplementableInterface {void abstractMethod () ;final void finalMethod () {}void overridableMethod() {}
}最后 那么您对此讨论的最终想法是什么 如果您还没听够请考虑同时阅读 Whiley编程语言作者David Pearce博士的 这篇出色文章 。 翻译自: https://www.javacodegeeks.com/2014/09/this-is-the-final-discussion.html