关于“最终”的最终决定

在Java中,过度使用final感觉就像是SHOUTING。 在很多时候它已经过时且不合适。

Java和JavaScript

这主要是关于Java中的final关键字,但是我对JavaScript中与之对应的const看法略有变化。 我可以认为const是一件好事,而final是一件坏事,需要进行一些分解。

我喜欢JavaScript中的const ,因为总的来说,使用letvar代码往往会执行我不同意的事情。 总体而言,变量在首次赋值后不需要重新分配。 对于累加器或某些循环情况,这不是正确的,但事实并非如此。

我提议的许多重构都是通过公式停止再分配该临时变量并将其委托给选择答案并返回它的函数。

因此,我的前提是,代码应在很大程度上应在所有变量默认情况下都视为单分配的前提下工作。

那我们先执行吧?

我们为什么不应该用Java来强制执行呢?

Java的已经有有效最终带来的最终好处这就需要信任结构概念的东西是最终的 -即lambda函数和匿名内部类。 从本质上讲,编译器已经知道final了,对我而言,在最终位置添加final就像喊一样。 当然,这会使代码更加繁忙……少即是多, final感觉就像人满为患。

我会原谅JavaScript中的const ,部分原因是linter非常热衷于推断const ,然后再要求它,部分原因是JavaScript是一种宽松的语言,如果不牢固地表达它,您将无法信任任何内容。 就是说,我宁愿不需要它!

我们如何信任自己?

是的,但是如果我不说某件事是final ,我怎么知道某事确实是final的。 如果有人更改了该怎么办?

范例A:

 public bool isFound(List<String> list, String value) { for ( final String item:list) { if (value.equals(item)) { return true ; } } return false ;  } 

上面的代码保证了循环内的item无法重新定义。 第一位–谁在乎!? 2号–方法非常简短。 如果忍者出现并试图改变item的价值,您会发现它的功能简短。

这就是重点。 如果您的功能非常短,并且使代码保持模块化,则可以看到发生了什么。 您不会感到意外,并且可以发现变化的变量与没有变化的引用。

范例B:

 final boolean hadValue = isFound(myList, "Foo" );  final boolean hadOtherValue = isFound(myList, "Bar" );  final boolean bothFound = hadValue && hadOtherValue;  final String message = "They were both " + bothFound ? "found" : " not found" ;  return message; 

打哈欠!

 boolean bothFound = isFound(myList, "Foo" ) && isFound(myList, "Bar" );  return "They were both " + bothFound ? "found" : " not found" ; 

别让我跟着你的思维过程,只用final一个字作为调味料。 使代码中的句子解释整个思想,并仅在需要时添加变量和修饰符。

决赛进入哪里?

我明智地使用final 。 我应该说,我在类内部将Spring组件中所有bean组件/服务的所有子服务都设为private final ,但我没有。 有一个争论,那就是应用程序上下文中服务的连接本质上是不可变的,但我倾向于不是这样。 如果您这样做,我不会争论。

我有两个关键用例,其中final是必须的!

他们都是关于呼喊和不变性的重要性。

  • 全局常量必须这样标记
  • 实施不变模式需要final并且也应标有路标

因此,您总是会发现我在类内部使用的类级常量或全局变量中使用private static final SomeType SOME_CONSTANT_IN_CAPITALS ,因为它们是特殊的,必须被视为具有额外保护的常量–约定很强,并且存在危险虐待比单个函数中的局部变量高得多。

您会发现我想要正确实现不变模式。

学习过求职面试并知道final也可以防止事情被压倒的人在这个阶段可能会感到自鸣得意,直到我说我对使用它并不真正感兴趣。 如果您试图阻止程序员具有灵活性,或者试图通过使final满足要求而满足checkstyle或Sonar的要求,那就加油!

但是,如果您出于某些原因想要真正的不可变对象,那么我向您致敬。

结论

当我开始写存储在缓存中并由多个线程共享的不可变数据对象时,您将无法阻止我final完成它。

我将在每周的每一天将您的记录器和您的参考数据移动到static final BLOCK_CAPITAL_NAME

不过,最重要的是: 用“”替换所有“最终”仍然是我做过的最令人满意的一些重构。

翻译自: https://www.javacodegeeks.com/2019/08/final-word-final.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCM设备在电网系统中的应用介绍

近年来&#xff0c;随着我国社会经济的快速发展和电力通信行业的不断进步&#xff0c;通信网络技术和网络系统不断完善和改进的同时&#xff0c;网络系统运行过程中也出现了很多的问题&#xff0c;要对其进行优化&#xff0c;否则可能影响电力通信网络的正常运行电力通信网络系…

PCM设备在雷达通信系统应用

PCM设备系统是目前国内企业最常用的综合接入通信设备&#xff0c;PCM设备所具优势众多&#xff0c;因此它能成为目前企业最常用的通信传输接入设备之一&#xff0c;而且在类似雷达通信系统等重要行业中广泛应用着。 PCM设备利用标准的E1数据传输通道&#xff0c;采用PCM制式&a…

ejb的maven_针对新手的Java EE7和Maven项目-第3部分-定义ejb服务和jpa实体模块

ejb的maven从前面的部分恢复 第1部分 第2部分 我们在第三部分继续介绍&#xff0c;我们已经有一个父pom&#xff0c;并且已经为我们的war模块定义了pom。 在我们的原始设置中&#xff0c;我们定义了我们的应用程序将包含一个ejb jar形式的服务jar。 这是我们的Enterprise Jav…

PCM设备终端烧毁板卡是什么原因?

最近&#xff0c;有新客服反映他们之前在某家设备厂家买了PCM设备&#xff0c;老是会烧毁终端板。所以另外选择了我们飞畅科技。那么&#xff0c;PCM设备终端烧毁板卡是什么原因呢&#xff1f;接下来飞畅科技的小编就来为大家具体分析下PCM设备终端烧毁板卡的原因&#xff0c;一…

全部隐藏!

在较早的文章中 &#xff0c;我写了以下几句话&#xff1a; 在面向对象的代码库中&#xff0c;该工具包应尽可能离散。 使用开发套件的次数越多&#xff0c;您的代码实际面向对象的次数就越少&#xff0c;或者您的抽象并不是最好的。 。 我认为有必要详细说明这一点&#xff0…

E1 PCM设备的主要特点介绍

E1 PCM设备是目前国内企业最常用的综合接入通信设备&#xff0c;它利用标准的E1数据传输通道&#xff0c;采用PCM制式&#xff0c;直接提供语音、数据、图像等多种用户接口。接下来飞畅科技的小编来为大家详细介绍下E1 PCM设备的主要特点&#xff0c;一起来看看吧&#xff01; …

docker集群_使用Docker,Chef和Amazon OpsWorks进行集群范围的Java / Scala应用程序部署...

docker集群Docker非常适合在单个节点上运行隔离的容器。 但是&#xff0c;大多数软件系统都在多个节点上运行&#xff0c;因此&#xff0c;除了Docker之外&#xff0c;我们还需要某种方法来指定哪些容器应在哪些节点上运行。 我要解决的特定问题如下&#xff1a;我有两个Scala…

PCM信号是什么信号?

PCM信号是模拟信号呢&#xff0c;还是数字信号呢&#xff1f;当然是数字信号啦&#xff01;PCM的完整定义是&#xff1a;将模拟信号的抽样量化值变换成代码称为脉冲编码调制&#xff08;PCM设备&#xff09;。 在光纤通信系统中&#xff0c;光纤中传输的是二进制光脉冲“0”码…

SDH光传输设备是什么?SDH设备特点介绍

SDH光传输设备是一种&#xff0c;将复接、线路传输以及交换功能融合为一体的、并且由统一网管系统操作的综合信息传送网络。SDH光传输设备&#xff0c;他可实现网络有效管理、能实时业务监控、能动态网络维护、不同厂商设备间的互通等多项功能。 SDH光传输设备能大大提高网络资…

通过MicroProfile上下文传播增强了CDI上下文和隔板

当将CDI与异步执行方法&#xff08;例如ManagedExecutorService &#xff0c;传统上不可能访问在原始线程中处于活动状态的所有CDI范围。 MicroProfile Context Propagation可以定义线程执行上下文并将其传递到完成阶段&#xff0c;尽管我们的代码是异步执行的&#xff0c;但它…

ProtoBuff3.0.0在Ubuntu上安装

ProtoBuff3.0.0在Ubuntu上安装 最近安装ns3&#xff0c;运行别人代码&#xff0c;编译build.py时出现需要update Proto的问题&#xff0c;本来想安装最新版本&#xff0c;因为需要翻墙&#xff0c;就参考大部分博客&#xff0c;安装3.0.0版本。&#xff08;备注&#xff1a;直…

SDH与PDH的区别介绍

PDH准同步数字系列&#xff0c;1-4次群2048K、8488K、34368K、139264K&#xff0c;有美国/日本标准和欧洲标准&#xff0c;我国沿用的是欧洲标准&#xff1b;30/32路组成一个1次群&#xff1b;各个厂家产品大多互相不兼容。 SDH同步数字系列&#xff0c;网元都带PDH接口&#…

Ubuntu 系统入门

1 Ubuntu 常用文件夹处理命令 1、 cd … //返回上一层目录 cd / //返回根文件夹 2、ls 列出文件名称 3、unzip XXX 对zip 压缩包解压 4、sudo baobab 进行磁盘空间分析 5、 利用vim修改只读文件内容 ::w !sudo tee % &#xff08;注意空格&#xff09; 2 Ubuntu显示隐藏文件 …

什么是MSTP(多业务传输平台)?

Multi-Service Transfer Platform简称MSTP&#xff0c;他是基于SDH的多业务传送平台的&#xff0c;同时也实现TDM、ATM、以太网等业务的接入、处理和传送&#xff0c;提供统一网管的多业务节点。 当前通信时代随着不断增长的IP数据、话音、图像等多种业务传送需求扩展&#xf…

spring boot示例_Spring Boot上的Spring社交示例,或者我如何停止担心和喜欢自动配置...

spring boot示例对于Spring Boot 1.1.0.RC1&#xff0c;添加了自动配置和Spring Social的启动程序pom&#xff0c;这意味着我不必向pom添加一百个依赖关系&#xff0c;并且将为我处理许多毫无意义的Spring配置。 让我们来看一个例子。 我将实现一个两页的Web应用程序。 一个将…

安装虚拟机后,启动出错的解决办法

安装虚拟机后&#xff0c;启动出错&#xff0c;需要找到路径中的配置文件 使用记事本或其他应用打开 在vmci0.prensent值改为FALSE,才可以正常启动

什么是E1接口,E1的使用注意事项

欧洲的30路脉码调制PCM简称E1&#xff0c;速率是2.048Mbit/s 。 我国采用的是欧洲的E1标准。E1接口有G&#xff0e;703非平衡的75 ohm&#xff0c;平衡的120 ohm2种接口。接下来就由飞畅科技的小编来为大家详细介绍下使用E1的三种方法及注意事项&#xff0c;一起来看看吧&#…

Java序列化魔术方法及其示例使用

在上一篇文章中&#xff0c; 您需要了解有关Java序列化的所有知识 &#xff0c;我们讨论了如何通过实现Java序列化来启用类的可序列化性。 Serializable接口。 如果我们的类未实现Serializable接口&#xff0c;或者该类具有对非Serializable类的引用&#xff0c;则JVM将抛出No…

主机文件复制到Ubuntu系统中

实现这个功能&#xff0c;需要VMware Tool安装 在虚拟机选项卡中安装VMware Tool 将DVD盘中压缩包复制到home文件夹 解压后&#xff0c;进入该文件夹&#xff0c;打开终端&#xff0c;执行安装文件 安装完成后重启电脑即可 ------------------------------------ 参考链接…

光纤的熔接,光纤接续步骤小知识

做光纤工程的应该都知道&#xff0c;光纤熔接接续是光纤传输系统中工程量最大、技术要求最复杂的重要工序&#xff0c;其质量好坏直接影响光纤线路的传输质量和可靠性。进行有效的方法及正确熔接步骤极其重要的。今天就由飞畅科技的小编来为大家介绍一下光纤光缆的熔接步骤与三…