栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Java拟引入模式匹配直接断言并强制绑定?

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java拟引入模式匹配直接断言并强制绑定?

到目前为止,我们在语言中已经有两个上下文可以容纳模式:`instanceof`和`switch`。

这两个都是条件上下文,倍设计用于处理部分模式:测试一个模式是否匹配,如果匹配,有条件地提取一些状态并对其采取行动。

不过,在有些情况下,我们知道一个模式总是匹配的,在这种情况下 我们想让自己免于询问的仪式。

如果我们有一个三维的“点Point”对象,总是询问它是否是一个 "点Point "是多余的,而且会分散注意力。

``
Point p = ...
if (p instanceof Point(var x, var y, var z)) {
     // use x, y, z
}
```

在这种情况下,我们在问一个我们知道答案的问题,并且我们扭曲了我们的代码结构来做这件事。

此外,我们还在 剥夺了编译器愿意做的类型检查。

引入Let-bind语句

在这种情况下,我们要断言模式匹配,并且强行绑定它,也就是说我们宁愿直接以我们认定的模式去做,不用询问了。

我们已经试验了几种表达方式:

而最好的方法似乎是某种 "let "语句

``
let Point(var x, var y, var z) p = ...;
// can use x, y, z, p
```

其他方式有用bind:

``
bind Point(var x, var y, var z) p = ...;
```

甚至不用引入关键字,直接普通使用即可:

``
Point(var x, var y, var z) p = ...;
```

`let`语句接收一个模式和一个表达式,我们静态地验证模式在表达式的类型上是穷尽的;

如果不是,在编译时就是一个类型错误。

任何出现在模式中的绑定都是肯定会被分配,并且在包含该块的其余部分的范围内 。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/784555.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号