当前位置: 首页 > news >正文

公司品牌的塑造网站建设外贸平台阿里巴巴补贴政策

公司品牌的塑造网站建设,外贸平台阿里巴巴补贴政策,有没有专业收费做网站优化的,wordpress顶部导航栏怎么创建作为我最近一直在进行的一些编码访谈的一部分#xff0c;有时会出现不变性问题。我自己并不过分教条#xff0c;但每当不需要可变状态时#xff0c;我会试图摆脱导致可变性的代码#xff0c;这在数据结构中通常是最明显的。然而#xff0c;似乎对不可变性的概念存在一些误…作为我最近一直在进行的一些编码访谈的一部分有时会出现不变性问题。我自己并不过分教条但每当不需要可变状态时我会试图摆脱导致可变性的代码这在数据结构中通常是最明显的。然而似乎对不可变性的概念存在一些误解开发人员通常认为拥有final引用或者val在Kotlin或Scala中足以使对象不可变。这篇博客文章深入研究了不可变引用和不可变数据结构。不可变数据结构的好处不可变数据结构具有显着优势例如没有无效的状态线程安全易于理解的代码更容易测试代码可用于值类型没有无效的状态当一个对象是不可变的时很难让对象处于无效状态。该对象只能通过其构造函数实例化这将强制对象的有效性。这样可以强制执行有效状态所需的参数。一个例子Address address new Address();address.setCity(Sydney);// address is in invalid state now, since the country hasnt been set.Address address new Address(Sydney, Australia);// Address is valid and doesnt have setters, so the address object is always valid.线程安全由于无法更改对象因此可以在线程之间共享它而不会出现竞争条件或数据突变问题。易于理解的代码与无效状态的代码示例类似使用构造函数通常比初始化方法更容易。这是因为构造函数强制执行必需的参数而setter或initializer方法在编译时不会强制执行。更易于测试的代码由于对象更具可预测性因此不必测试初始化方法的所有排列即在调用类的构造函数时该对象有效或无效。使用这些类的代码的其他部分变得更可预测具有更少的NullPointerException机会。有时当传递对象时有些方法可能会改变对象的状态。例如public boolean isOverseas(Address address) {if(address.getCountry().equals(Australia) false) {address.setOverseas(true); // address has now been mutated!return true;} else {return false;}}一般来说上面的代码是不好的做法。它返回一个布尔值并可能改变对象的状态。这使得代码更难理解和测试。更好的解决方案是从Address 类中删除setter 并通过测试国家名称返回一个布尔值。更好的方法是将此逻辑移动到 Address 类本身(address.isOverseas())。当确实需要设置状态时在不改变输入的情况下制作原始对象的副本。可用于值类型想象一下金额比如10美元。10美元将永远是10美元。在代码中这可能看起来像 public Money(final BigInteger amount, final Currency currency)。正如您在此代码中看到的那样不可能将10美元的值更改为除此之外的任何值因此上述内容可以安全地用于值类型。最终引用不要使对象不可变如前所述我经常遇到的问题之一是这些开发人员中的很大一部分并不完全理解最终引用和不可变对象之间的区别。似乎这些开发人员的共同理解是变量成为最终的那一刻数据结构变得不可变。不幸的是这并不是那么简单我想一劳永逸地把这种误解带出世界A final reference does not make your objects immutable!换句话说下面的代码并没有使对象不变final Person person new Person(John);为什么不好吧虽然person是最后一个字段而且无法重新分配但是 Person类可能有一个setter方法或其他mutator方法可以执行如下操作person.setName(Cindy);无论最终修饰符如何这都是一件非常容易的事情。或者 Person类可能会公开这样的地址列表。访问此列表允许您向其添加地址因此如下所示改变 person对象person.getAddresses().add(new Address(Sydney));好了既然我们已经解决了这个问题那么让我们深入了解一下我们如何使类不可变。在设计我们的类时我们需要记住几件事不要以可变的方式暴露内部状态要在内部改变状态确保子类不会覆盖上述行为根据以下准则让我们设计一个更好的Person class 版本 。public final class Person {// final class, cant be overridden by subclassesprivate final String name; // final for safe publication in multithreaded applicationsprivate final List addresses;public Person(String name, List addresses) {this.name name;this.addresses List.copyOf(addresses); // makes a copy of the list to protect from outside mutations (Java 10).// Otherwise, use Collections.unmodifiableList(new ArrayList(addresses));}public String getName() {return this.name; // String is immutable, okay to expose}public List getAddresses() {return addresses; // Address list is immutable}}public final class Address { // final class, cant be overridden by subclassesprivate final String city; // only immutable classesprivate final String country;public Address(String city, String country) {this.city city;this.country country;}public String getCity() {return city;}public String getCountry() {return country;}}现在可以使用以下代码import java.util.List;final Person person new Person(John, List.of(new Address(“Sydney”, Australia));现在上面的代码是不可变的但是由于Person 和 Address 类的设计 同时还有最终引用因此无法将person变量重新分配给其他任何东西。更新正如有些人提到的上面的代码仍然是可变的因为我没有在构造函数中复制地址列表。因此如果不在ArrayList() 构造函数中调用new 仍然可以执行以下操作final List addresses new ArrayList();addresses.add(new Address(Sydney, Australia));final Person person new Person(John, addressList);addresses.clear();但是由于在构造函数中创建了一个新副本上面的代码将不再影响类中复制的地址列表引用Person 从而使代码安全。我希望上述内容有助于理解最终和不变性之间的差异。以上就是本文的全部内容希望对大家的学习有所帮助也希望大家多多支持脚本之家。
http://www.yutouwan.com/news/131040/

相关文章:

  • seo站长综合查询工具今天的新闻大事10条
  • 网站建设找d云世家郑州seo技术培训班
  • 网站icp是什么意思wordpress文章阅读更多按钮
  • 蒙古文网站建设汇报材料WordPress整站下载器
  • 手机网站一年费用吗常用的seo工具的是有哪些
  • 西安免费做网站机构赶集网官网首页
  • 天辰建设网站公司wordpress自定义字段面板
  • 免费建立国外网站云主机安装网站
  • 昆山住房和城乡建设局网站网站开发自学时间
  • 济阳做网站多少钱工商营业执照在线查询
  • 网站设计两边为什么要留白宁波seo优化外包公司
  • 网站建设设备制作logo的网站
  • 网站推广品牌建设江苏盐城网站开发
  • 网站建设工作简介wordpress邮件验证码
  • 如何服务器ip地址做网站wordpress 代码生成二维码
  • dw个人网站设计模板电商seo
  • 浦口区网站建设网络服务协议需要交印花税吗
  • 网站用什么格式做wordpress版权插件
  • 上海十大活动策划公司从seo角度做网站流量
  • 无锡做网站哪里好自己能做app软件吗
  • 做网站如何赢利的iis配网站
  • 保定设计网站建设wordpress 点赞 开启
  • 商城网站建设价格最优临清设计网站
  • 做网站简单还是app简单合肥网页设计方法
  • 建设银行mylove网站河北建设银行官网招聘网站
  • 电子商务网站建设要求网站开发合同售后服务
  • 怎么提高网站访问速度网站倒计时
  • wordpress做得比较大的网站永久免费google搜索引擎
  • html旅游网站页面设计模板在手机上怎么建造网站
  • 织梦的手机端网站模板下载地址郑州建设信息网 首页