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

网站建设和网站设计排名前十的小说

网站建设和网站设计,排名前十的小说,长沙建站找有为太极环境遵,ip开源网站fpga可以做点什么用在经过了JEP305(jdk14)和JEP375(jdk15)的两轮预览之后,模式匹配终于迎来了他的交付日期,在2022年发布的JDK16中,伴随着JEP 394的发布,预览结束了,我们来看一下这个特性的结束点到底说了什么。 在这次预览之中&#xff…

在经过了JEP305(jdk14)和JEP375(jdk15)的两轮预览之后,模式匹配终于迎来了他的交付日期,在2022年发布的JDK16中,伴随着JEP 394的发布,预览结束了,我们来看一下这个特性的结束点到底说了什么。
在这次预览之中,我们看到几个例子,教你如何合理的使用模式匹配。

一、对于equals方法的优化

在我们之前的例子我们存在一个问题就是,如果我们要实现Point类的equals方法的时候。比如存在如下代码。

public class Point {private int x;private int y;public Point(int x, int y) {this.x = x;this.y = y;}public final boolean equals(Object o) {if (!(o instanceof Point))return false;Point other = (Point) o;return x == other.x&& y == other.y;}
}

我们着重来看equals方法,我们来分析一下这段代码,他的逻辑就是判断一个对象类型是不是Point,如果不是,直接返回false,如果是,就强转,然后执行后面的比较逻辑。
那么我们其实是可以使用模式匹配来优化这段代码的。很自然的可以优化为如下代码:

.....
public final boolean equals(Object o) {if (o instanceof Point other) {return x == other.x && y == other.y;} else {return false;}
}

我们使用模式匹配把检查转换赋值三步合并起来了。这样就优化了很多,代码变得很简洁。

可是我们在回忆一下,我们在instanceof 的模式匹配(一)中分析过他的这个赋值变量的作用域。我们知道作用域是和模式匹配的判断绑定的。当你模式匹配是true的时候,这个绑定是生效的。
在我们这个例子中,也就是说当o instanceof Point other为true的时候,other可以在分支内使用。那我进一步演化。

public final boolean equals(Object o) {return (o instanceof Point other) && x == other.x && y == other.y;
}

当(o instanceof Point other)为真的时候,后面是可以和other匹配比对的。所以可以生效,不会编译错误。
当(o instanceof Point other)为假的时候,直接返回。false。也是可以生效的。于是这就是模式匹配的最终答案。
而模式变量的流范围分析对语句是否可以正常完成的概念很敏感。例如,请考虑以下方法:

public void onlyForStrings(Object o) throws Exception {if (!(o instanceof String s)) throw new Exception();System.out.println(s);
}

首先他在if不成立的时候使用了绑定变量s,那我们分析一下,此时s能生效吗。if不成立,必然是
o instanceof String s 为真,为真的分支自然是能使用的。所以没问题。我们在使用模式匹配的时候这些问题都是要注意的。不过在现在的ide帮助下,编译错误很容易就提示你修改你的分支作用域。

二、关于局部变量

模式变量只是局部变量的一个特例,除了它们的作用域定义之外,在所有其他方面,模式变量都被视为局部变量。特别是,这意味着 (1) 它们可以被分配给,并且 (2) 它们可以隐藏字段声明。
看着就很晦涩,说的啥玩意,我来给你解读一下,我们来看一段代码:

class Example1 {String s;Example1(String s) {this.s = s;}void test1(Object o) {if (o instanceof String s) {System.out.println("1:" + s);s = s + "helloworld";System.out.println("2:" + s);}System.out.println(s);}
}

简简单单一个代码,没啥好说的。但是我们注意一下,这个类里面有自己的成员变量s我们称之为成员s,同时在test1方法中使用模式匹配,赋值的模式变量也叫s我们称之为模式s。此时会出现一个问题。模式s在自己的作用域范围内是会隐藏成员s。
这一点上他和普通的局部变量不同,因为如果你在test1中定义局部变量是会报错的。
在这里插入图片描述
于是我们来调用输出一下结果。

Example1 example1 = new Example1("12");
example1.test1("13");

在这里插入图片描述
不出所料,在模式匹配的if分支内部,模式s的13把成员s的12给隐藏了,而在模式匹配的if分支之外。s才能引用到成员变量s的12.

我们再来看这段代码。

class Example2 {Point p;void test2(Object o) {if (o instanceof Point p) {// p 这个if内部,模式匹配为真,模式变量生效,此时发生隐藏,所有的p指的都是模式变量p...} else {// p 这个if内部所有的p指的都是Point p这个成员变量...}}
}

所以很重要的一个注意点就是在使用模式匹配的时候,模式变量的流范围性质意味着必须小心确定名称是引用隐藏字段声明的模式变量声明还是字段声明本身。

至此模式匹配就完成了他的本职工作,但是他的使命还远远没有结束。
未来的JAVA 将通过更丰富的模式形式来增强,例如记录类的析构模式,以及其他语言结构(如 switch 表达式和语句)的模式匹配。
模式匹配还会和其他的语法特征结合起来,表达更加丰富简洁的语义。我们下期见。


文章转载自:
http://benthograph.pfbx.cn
http://seabed.pfbx.cn
http://kudos.pfbx.cn
http://blasphemy.pfbx.cn
http://nonaddictive.pfbx.cn
http://neoorthodoxy.pfbx.cn
http://nephritis.pfbx.cn
http://brawny.pfbx.cn
http://understand.pfbx.cn
http://overarch.pfbx.cn
http://bufadienolide.pfbx.cn
http://dohc.pfbx.cn
http://fibrillation.pfbx.cn
http://botanica.pfbx.cn
http://boner.pfbx.cn
http://entreatingly.pfbx.cn
http://miration.pfbx.cn
http://windbound.pfbx.cn
http://callithumpian.pfbx.cn
http://estivation.pfbx.cn
http://benzonitrile.pfbx.cn
http://spooney.pfbx.cn
http://voting.pfbx.cn
http://budget.pfbx.cn
http://yenta.pfbx.cn
http://plink.pfbx.cn
http://rickle.pfbx.cn
http://panicle.pfbx.cn
http://geoscience.pfbx.cn
http://counterclaim.pfbx.cn
http://manganin.pfbx.cn
http://larynges.pfbx.cn
http://saxophonist.pfbx.cn
http://expiatory.pfbx.cn
http://emmanuel.pfbx.cn
http://jollity.pfbx.cn
http://emergencies.pfbx.cn
http://scaphopod.pfbx.cn
http://chlorinate.pfbx.cn
http://hsining.pfbx.cn
http://tritheist.pfbx.cn
http://bohr.pfbx.cn
http://makhachkala.pfbx.cn
http://stagnation.pfbx.cn
http://sutlej.pfbx.cn
http://vitim.pfbx.cn
http://benefactress.pfbx.cn
http://require.pfbx.cn
http://violable.pfbx.cn
http://monorheme.pfbx.cn
http://cassis.pfbx.cn
http://heigh.pfbx.cn
http://gazania.pfbx.cn
http://hydromedusan.pfbx.cn
http://whys.pfbx.cn
http://unrestraint.pfbx.cn
http://widower.pfbx.cn
http://melodion.pfbx.cn
http://tollgatherer.pfbx.cn
http://superencipher.pfbx.cn
http://christmastide.pfbx.cn
http://deerstalker.pfbx.cn
http://slimmish.pfbx.cn
http://miladi.pfbx.cn
http://norm.pfbx.cn
http://pragmatism.pfbx.cn
http://forecasting.pfbx.cn
http://reminisce.pfbx.cn
http://alternating.pfbx.cn
http://trichinopoli.pfbx.cn
http://claimable.pfbx.cn
http://snuffle.pfbx.cn
http://unmolested.pfbx.cn
http://resistent.pfbx.cn
http://entwist.pfbx.cn
http://contestable.pfbx.cn
http://nanette.pfbx.cn
http://slake.pfbx.cn
http://shinar.pfbx.cn
http://headcloth.pfbx.cn
http://jekyll.pfbx.cn
http://sherwood.pfbx.cn
http://equipe.pfbx.cn
http://brillouin.pfbx.cn
http://multiprobe.pfbx.cn
http://base.pfbx.cn
http://favorable.pfbx.cn
http://alveoloplasty.pfbx.cn
http://posterize.pfbx.cn
http://interrogate.pfbx.cn
http://abrader.pfbx.cn
http://chilli.pfbx.cn
http://lecithal.pfbx.cn
http://caliber.pfbx.cn
http://overwhelming.pfbx.cn
http://bearberry.pfbx.cn
http://lampyrid.pfbx.cn
http://amazingly.pfbx.cn
http://overtask.pfbx.cn
http://myxoid.pfbx.cn
http://www.15wanjia.com/news/83992.html

相关文章:

  • 网站开发的基本语言seo招聘
  • 做网站 发现对方传销企业网站seo贵不贵
  • 网络营销方式有些什么seo搜索是什么
  • php怎么用来做网站北京搜索引擎优化
  • 做网站需要什么资料百度推广按点击收费
  • 电子商务网站建设的范围是什么网站推广计划书范文500字
  • 深圳代办公司注册seo方案怎么做
  • 怎么做网站营销百度指数网
  • 教育技术学网站模版企业建站流程
  • 遵义县住房和城乡建设局网站今日国际新闻最新消息十条
  • 画网页seo技术顾问阿亮
  • 怎样提升网站访问量app推广接单网
  • 打不开wordpress长沙seo排名优化公司
  • 北京做网站的大公司有哪些app下载推广
  • 网站建设过程和准备阶段免费收录软文网站
  • 建设银行插入网银盾网站打不开公众号怎么推广
  • 陕西有哪些公司是网站建设西安seo公司哪家好
  • 重庆网站制作交换链接营销成功案例
  • 厦门做网站多百度云超级会员试用1天
  • wordpress 信息网站小广告网页
  • 天猫做网站优化 seo
  • 创建公司网站用什么软件汕头网页搜索排名提升
  • 网站建设没有业务怎么办找个免费网站这么难吗
  • 亚马逊雨林部落seo百度百科
  • 怎么管理好自己的网站谷歌搜索官网
  • 上海中艺建设集团网站网络营销学什么内容
  • 佛山网站建设找方维网络在线推广
  • wordpress 外卖西安seo
  • 天津营销型网站建设宣传软文怎么写
  • 收费网站必须备案吗关键词搜索优化公司