• Jagger Chen
    置顶
    2021-12-01
    1. 匹配情景的支配地位,第一条语句支配了第二条语句 case Shape.Rectangle r -> false; case Shape.Rectangle r && r.length() == r.width() -> true; 2. 戒备模式的匹配情景 https://docs.oracle.com/en/java/javase/17/language/pattern-matching.html Shape.Rectangle r && r.length() == r.width() 替代了 case Shape.Rectangle r -> { if (r.length() == r.width()) { yield true; } yield false; }

    作者回复: 我要点赞把这个回答置顶。 小伙伴们,让更多的同学看到这个留言吧!

    
    11
  • bigben
    2021-11-29
    就喜欢这种某地方做了修改可以检测影响其他地方的特性,代码改起来也放心多了。

    作者回复: 改代码太难了,这种特性确实招人喜欢。

    
    1
  • Catherine
    2022-10-09 来自美国
    请问第六讲switch表达式不是没有default会编译错误吗?为什么在这一讲里没有default情景不会报错呢?

    作者回复: 请再想想穷举的概念。

    
    
  • 松松
    2021-12-06
    用jshell尝试了一下不覆盖null算不算穷举,答案是同样算,不过传进null的时候会空指针。

    作者回复: 是的。

    
    
  • 黎明🌅
    2021-12-04
    哇哇哇!!!Java 是世界上最最最好的编程语言[好的] 不接受任何反驳

    作者回复: 哈哈,淡定些

    
    
  • Jxin
    2021-12-01
    这个 switch表达式 很香啊,感觉可以用来代替 map策略模式 了。虽然相对于 map策略模式 多了每次新增策略时要追加 case ,但基于编译期的检查,其实是能感知到的,所以只要能发包就不会漏(多包一层给调用侧也就隔离了散弹式修改的可能)。但是,原本被map策略模式隐掉的路由或则映射关系就再次显示表达了,我觉得这个显示表达所有路由关系的价值完全可以覆盖每次追加一处(可感知变动)修改的成本。

    作者回复: 而且,追加的需求还能感知到,这就太棒了!

    共 2 条评论
    
  • 许灵
    2021-12-01
    https://github.com/XueleiFan/java-up/pull/11, 现在的代码库有点问题,主要是新特性加了之后。需要开启module, 有一些代码不符合要求,本次作业答案,已经在文章中了。使用类型的匹配主要是为了更早的,自动地发现问题, 而不是等出问题了去定位问题。

    作者回复: 谢谢你发现了这个问题:“现在的代码库有点问题”。 有一些东西遗漏了,加进来了。你更新一下再试试看,还有没有问题。PR我稍后再看。

    
    
  • 许灵
    2021-12-01
    https://github.com/XueleiFan/java-up/pull/11

    作者回复: 代码很干净。 有一个小小的建议,放在PR的评论里了。

    
    
  • ABC
    2021-12-01
    思考题: 1.首先可以去掉代码头部的if判断 2.在switch中整合null,default,如果代码作为类库发布,此处可以抛出异常,告知调用者必须明确参数。如果作为业务代码,则可以默认某个类型为返回值。 PS.手机阅读,未运行代码,如有问题还请指正。谢谢老师。

    作者回复: 两个点都没有问题,但是没有找出来代码里的错误。switch匹配有两个特点,我们没有讨论。这个题,需要进一步阅读switch 的模式匹配的官方文档,才能做的出来。

    共 2 条评论
    
  • ABC
    2021-12-01
    第五讲的时候简单用了一下,但有一个疑惑,如果有三个子类,单用boolean并不能区分出具体是哪个子类。 判断空这方面,Dart有点激进,所有变量必须是非空的,除非用?问号修饰,表示变量可空。估计很难在Java上看到空安全了。

    作者回复: 空安全是一个热门的话题,我们后面也会讨论。

    
    