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

中小企业网站制作广州网络服务公司找赛合公司wordpress怎么缩短标题

中小企业网站制作广州网络服务公司找赛合公司,wordpress怎么缩短标题,导入表格数据做地图网站,免费推广的途径与原因1 摘要 通过使用记录模式来增强Java编程语言#xff0c;以解构记录值。记录模式和类型模式可嵌套使用#xff0c;从而实现强大、声明式和可组合的数据导航和处理形式。 2 发展史 由 JEP 405 提出的预览功能#xff0c;并在JDK 19发布#xff0c;然后由 JEP 432 再次预览…1 摘要 通过使用记录模式来增强Java编程语言以解构记录值。记录模式和类型模式可嵌套使用从而实现强大、声明式和可组合的数据导航和处理形式。 2 发展史 由 JEP 405 提出的预览功能并在JDK 19发布然后由 JEP 432 再次预览并在JDK 20发布。该功能与用于switch的模式匹配JEP 441共同演进并且二者有相当大的交互作用。本JEP提议在持续的经验和反馈基础上对该功能完善。 除了一些次要的编辑更改自第二个预览版以来的主要变化是删除了对增强for语句头部出现记录模式的支持。这个功能可能会在未来的JEP中重提。 3 目标 扩展模式匹配以解构记录类的实例实现更复杂的数据查询添加嵌套模式实现更可组合的数据查询 4 动机 Java 16中 JEP 394 扩展了instanceof运算符使其可接受类型模式并执行模式匹配。这个简单的扩展使得熟悉的instanceof和强制转换惯用法变得更简洁、更不易出错 // Java 16 if (obj instanceof String) {String s (String)obj;... 使用s ... } // ≥Java 16 if (obj instanceof String s) {... 使用s ... }新代码中若obj在运行时是String的实例则obj与类型模式String s匹配。若模式匹配成功则instanceof true且模式变量s被初始化为obj强制转换为String的值然后可以在包含的代码块中使用。 类型模式一次性消除了许多类型转换的出现。然而它们只是朝着更声明式、以数据为焦点的编程风格迈出的第一步。随Java支持新的、更具表现力的数据建模模式匹配可通过让开发表达模型的语义意图来简化对这些数据的使用。 5 Pattern matching和records 记录 (JEP 395) 是数据的透明载体。接收记录类实例的代码通常会使用内置的组件访问器方法提取数据即组件。 5.1 Point的实例 如用类型模式测试一个值是否是记录类Point的实例并在匹配成功时从该值中提取x和y组件。 Java8 class Point {private int x;private int y;public Point(int x, int y) {this.x x;this.y y;}public int getX() {return x;}public int getY() {return y;} }static void printSum(Object obj) {if (obj instanceof Point) {Point p (Point) obj;int x p.getX();int y p.getY();System.out.println(x y);} }≥Java 16 record Point(int x, int y) {}static void printSum(Object obj) {if (obj instanceof Point p) {int x p.x();int y p.y();System.out.println(xy);} }仅使用模式变量p调用访问方法x()、y()这些方法返回组件x和y的值。 在每个记录类中其访问方法和组件之间存在一对一对应关系。 如果模式不仅可测试一个值是否是Point的实例还可直接从该值中提取x和y组件从而代表我们调用访问器方法的意图将更好。换句话说 // Java 21及以后 static void printSum(Object obj) {if (obj instanceof Point(int x, int y)) {System.out.println(xy);} }Point(int x, int y) 是一个record pattern。它将用于提取组件的局部变量的声明直接提升到模式本身并在值与模式匹配时通过调用访问方法对这些变量初始化。实际上record pattern将记录的实例解构为其组件。 6 嵌套record pattern 模式匹配的真正威力在于优雅扩展到匹配更复杂的对象图。 考虑以下声明 // Java 16及以后 record Point(int x, int y) {} enum Color { RED, GREEN, BLUE } record ColoredPoint(Point p, Color c) {} record Rectangle(ColoredPoint upperLeft, ColoredPoint lowerRight) {}已知可使用记录模式提取对象的组件。如想从左上角点提取颜色 // Java 21及以后 static void printUpperLeftColoredPoint(Rectangle r) {if (r instanceof Rectangle(ColoredPoint ul, ColoredPoint lr)) {System.out.println(ul.c());} }但ColoredPoint值ul本身是个记录值希望进一步分解。因此记录模式支持嵌套允许对记录组件进一步匹配、分解。可在记录模式中嵌套另一个模式同时对外部和内部记录分解 // Java 21及以后 static void printColorOfUpperLeftPoint(Rectangle r) {if (r instanceof Rectangle(ColoredPoint(Point p, Color c),ColoredPoint lr)) {System.out.println(c);} }嵌套模式允许以与组装对象的代码一样清晰简洁方式拆解聚合。如创建一个矩形通常会将构造函数嵌套在一个表达式中 // Java 16及以后 Rectangle r new Rectangle(new ColoredPoint(new Point(x1, y1), c1), new ColoredPoint(new Point(x2, y2), c2));使用嵌套模式我们可以使用与嵌套构造函数结构相似的代码来解构这样的矩形 // Java 21及以后 static void printXCoordOfUpperLeftPointWithPatterns(Rectangle r) {if (r instanceof Rectangle(ColoredPoint(Point(var x, var y), var c),var lr)) {System.out.println(Upper-left corner: x);} }嵌套模式可能无法匹配 // Java 21及以后 record Pair(Object x, Object y) {} Pair p new Pair(42, 42); if (p instanceof Pair(String s, String t)) {System.out.println(s , t); } else {System.out.println(Not a pair of strings); }这里的记录模式Pair(String s, String t)包含了两个嵌套的类型模式即String s和String t。如果一个值与模式Pair(String s, String t)匹配那么它是一个Pair并且递归地它的组件值与类型模式String s和String t匹配。在我们上面的示例代码中由于记录的两个组件值都不是字符串因此这些递归的模式匹配失败因此执行else块。 总之嵌套模式消除了导航对象的意外复杂性使我们能专注这些对象所表示的数据。它们还赋予我们集中处理错误的能力因为如果一个值无法与嵌套模式P(Q)匹配那子模式P和Q中的任何一个或两个都无法匹配。我们不需要检查和处理每个单独的子模式匹配失败——要么整个模式匹配要么不匹配。 7 描述 使用可嵌套的记录模式。 模式语法变为 Pattern:TypePatternRecordPatternTypePattern:LocalVariableDeclarationRecordPattern:ReferenceType ( [ PatternList ] )PatternList: Pattern { , Pattern }8 记录模式 由记录类类型和可能为空的模式列表组成该列表用于与相应的记录组件值进行匹配。 如声明 record Point(int i, int j) {}如果值v与记录模式Point(int i, int j)匹配则它是记录类型Point的实例如这样模式变量i将被初始化为在值v上调用与i对应的访问器方法的结果模式变量j将被初始化为在值v上调用与j对应的访问器方法的结果。模式变量的名称不需要与记录组件的名称相同也就是说记录模式Point(int x, int y)的行为相同只是模式变量x和y被初始化。 null值不与任何记录模式匹配。 记录模式可用var来匹配记录组件而无需声明组件的类型。在这种情况下编译器会推断由var模式引入的模式变量的类型。如模式Point(var a, var b)是模式Point(int a, int b)的简写。 记录模式声明的模式变量集合包括模式列表中声明的所有模式变量。 如果一个表达式可以在不需要未经检查的转换的情况下将其转换为模式中的记录类型则该表达式与记录模式兼容。 如果记录模式命名了一个泛型记录类但没有给出类型参数即记录模式使用原始类型则始终会推断类型参数。例如 // Java 21及以后 record MyPairS,T(S fst, T snd){}; static void recordInference(MyPairString, Integer pair){switch (pair) {case MyPair(var f, var s) - ... // 推断的记录模式 MyPairString,Integer(var f, var s)...} }记录模式的类型参数推断在支持记录模式的所有结构中都受到支持即instanceof表达式和switch语句和表达式。 推断适用于嵌套记录模式例如 // Java 21及以后 record BoxT(T t) {} static void test1(BoxBoxString bbs) {if (bbs instanceof BoxBoxString(Box(var s))) {System.out.println(String s);} }这里嵌套模式Box(var s)的类型参数被推断为String因此模式本身被推断为Box(var s)。 甚至可省略外部记录模式中的类型参数得到简洁代码 // Java 21及以后 static void test2(BoxBoxString bbs) {if (bbs instanceof Box(Box(var s))) {System.out.println(String s);} }这里编译器会推断整个instanceof模式为BoxBoxString(BoxString(var s))。 为保持兼容性类型模式不支持隐式推断类型参数如类型模式List l始终被视为原始类型模式。 9 记录模式和完整的switch JEP 441增强了switch表达式和switch语句以支持模式标签。无论是switch表达式还是模式switch语句都必须是完整的switch块必须有处理选择器表达式的所有可能值的子句。对于模式标签这是通过分析模式的类型来确定的例如case标签case Bar b匹配类型为Bar及其所有可能的子类型的值。 对于涉及记录模式的模式标签分析更加复杂因为我们必须考虑组件模式的类型并对密封层次结构进行调整。例如考虑以下声明 class A {} class B extends A {} sealed interface I permits C, D {} final class C implements I {} final class D implements I {} record PairT(T x, T y) {} PairA p1; PairI p2;以下switch不是完整的因为没有匹配包含两个类型为A的值的对 // Java 21及以后 switch (p1) { // 错误case PairA(A a, B b) - ...case PairA(B b, A a) - ... }这两个switch是完整的因为接口I是密封的因此类型C和D涵盖了所有可能的实例 // Java 21及以后 switch (p2) {case PairI(I i, C c) - ...case PairI(I i, D d) - ... }switch (p2) {case PairI(C c, I i) - ...case PairI(D d, C c) - ...case PairI(D d1, D d2) - ... }相比之下这个switch不是完整的因为没有匹配包含两个类型为D的值的对 // Java 21及以后 switch (p2) { // 错误case PairI(C fst, D snd) - ...case PairI(D fst, C snd) - ...case PairI(I fst, C snd) - ... }10 未来 记录模式的描述中提到了许多可以扩展这里描述的记录模式的方向 可变参数模式用于可变数量的记录匿名模式可以出现在记录模式的模式列表中匹配任何值但不声明模式变量适用于任意类的值而不仅仅是记录类的模式。 我们可以在未来的JEP中考虑其中的一些方向。 11 依赖关系 本JEP建立在Pattern Matching for instanceofJEP 394的基础上该功能已在JDK 16中发布。它与Pattern Matching for switchJEP 441共同演进。 本文由博客一文多发平台 OpenWrite 发布
http://www.zqtcl.cn/news/125390/

相关文章:

  • 做ppt会去什么网站找图网页制作与网站建设试题
  • 如何用ai给网站做logo宝安网站制作公司
  • sem是什么职业岗位单页式网站 seo
  • 做网站用什么版本系统国外有哪些设计网站推荐
  • dz论坛怎么做视频网站吗哪些公司是wordpress
  • 在微信怎样搞做微视频网站商城小程序模板源码完整版
  • h5跟传统网站有啥区别读取wordpress最新文章
  • 网站推广120最超值的网站建设
  • 移动网站制作公司如何开公司做网站
  • 网站建设 青海试题wordpress的特点
  • 源码如何做网站宽甸县建设局网站
  • 用dw做的网页怎么连到网站上企业网站备案资料填写单
  • 中文 网站模板企业怎么建设网站
  • 建设户外腰包网站哪个网站注册域名好
  • 六安网站建设价格小学生编程网课前十名
  • 绵阳网站建设信赖辉煌wordpress多账号权限
  • 网站外链快速建设网站维护要学多久
  • 做网站都是用ps吗郑州网站设计培训
  • wordpress 多站点教程厦门做网站维护的公司
  • 婚纱网站建设需求分析wordpress js图片
  • seo网站怎么优化有哪些企业网站平台
  • 响应式中文网站欣赏wordpress 带分页的主题
  • 什么样的网站可以做站内站房地产的设计网站建设
  • 成都住房和城乡建设局 网站首页深圳西乡建网站
  • 商城类的网站一般怎么做开发app软件的步骤
  • 招聘网站做销售怎么样做网站后台学什么专业
  • 帮别人做彩票网站餐饮网站建设需求分析
  • 企业服务平台工程建设云深圳网站建设专业乐云seo
  • 怎么建立小公司网站抖音运营推广
  • 无锡地区做网站嵌入式软硬件开发