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

国际商业网站wordpress语言修改

国际商业网站,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.huolong8.cn/news/287995/

相关文章:

  • 手机移动端网站dedecms能制作几个网站
  • 网站建设如何网络销售电子商务网站建设资讯
  • 黄页推广网站下载怎么制作网站设计
  • 前端电商网站登录界面怎么做传奇网站如何建设
  • 简单手机网站开发软件手机淘宝官网首页
  • 正安县网站seo优化排名随州建设局网站
  • 做网站推广托管注意求网站建设和网页设计的电子书
  • 静态网站怎么做留言板wordpress d9
  • 黄村网站建设价格如何用手机建设网站
  • 没有公司可以做网站吗做个网站设计多少钱
  • 学校网站维护怎么做广西建设网站网址多少
  • 湖北海厦建设有限公司网站企业介绍 wordpress
  • wordpress 建站群个人注册公司需要哪些资料
  • 有哪些做数据分析的网站网站建设 太原
  • 北京网站名称注册证书dede医院网站模板
  • 淘宝联盟里的网站推广怎么做广东省建设执业注册中心网站
  • 网站怎么做seo、网友
  • ui特效网站北京网站建设 和君
  • 做快消品的网站怎么样购买服务器建设网站
  • 域名会影响网站排名吗做空运货代常用网站
  • 做个企业网站的公司极路由 做网站
  • 镇江高端网站定制招聘网官方网站
  • 做自己的首席安全官的网站asp网站设置
  • 建大型网站需要多少钱汕头网站建设制作报价
  • 卓越高职院建设网站登封市城乡建设路网站
  • 成都wap网站建设wordpress token插件
  • 网站建设 动态添加内容在线制作图网站
  • 响水建设局网站做电商网站一般需要什么流程
  • 厦门外贸网站搭建餐饮网络推广有哪些渠道
  • 长春 美容 网站建设广州app开发服务