从 Java 11 迁移到 Java 17 值得吗?(2)
时间:2023-08-13 02:57 来源:网络整理 作者:墨客科技 点击:次
Java 17也考虑了安全性,并朝着这个方向迈出了重要的一步。这个想法是限制类或接口的继承,同时保持其公开。结果,新的类类型,密封类,被添加到Java中。密封类的语法允许你指定可以使用其功能的后代。反过来,继承者还可以允许或拒绝继承,或者指定可以沿链继承的类。此功能使你可以更灵活地创建项目,并方便地调整代码的API。 Java 17. 密封类: 复制 public sealed class SealedClass permits AnotherSealedClass, AnotherNonSealedClass, AnotherFinalClass { } Java 17. 非密封继承人: 复制 public non-sealed class AnotherNonSealedClass extends SealedClass { } Java17.最终继承人: 复制 public final class AnotherFinalClass extends SealedClass { } Java17.密封继承人: 复制 public sealed class AnotherSealedClass extends SealedClass permits AnotherNonSealedClassTwo { } Javai17.非密封继承人二级: 复制 public non-sealed class AnotherNonSealedClassTwo extends AnotherSealedClass { } 6、NullPointerExceptions 最后,Java 17 中一个非常有用的更新是改进的NullPointerException!最后,在堆栈跟踪日志中,你可以看到哪个特定字段导致了NullPointerException。仅此功能就应该鼓励你切换到Java 17。你不再需要长时间在代码中四处寻找发生异常的险恶地方;现在Java将为你完成所有工作。 Java11.NPE: 复制 public static void main(String... args) { String s = null; System.out.println(s.toLowerCase()); } 复制 Exception in thread "main" java.lang.NullPointerException at Main.main(Main.java:4) Java17.改进的NPE: 复制 public static void main(String... args){ String s = null; System.out.println(s.toLowerCase()); } 复制 Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.toLowerCase()" because "s" is null at edu.javamodules/edu.javaversions.eleventoseventeen.NpeExample.main(NpeExample.java:7) 7、其他创新 当然,这并不是Java17中所做的更改的全部列表,但是讨论的创新是最引人注目的。与往常一样,Java开发人员在改进JVM方面做得非常出色,使其更加高效。 8、小结 Java17中所做的所有改进都传达了一个信息:是时候切换到这个版本了。过渡承诺语法更简洁,性能得到提高。你的项目将获得安全性、灵活性和更好的错误消息。如果你已经迁移到Java11,那么迁移到Java17 会很顺利。Java的竞争优势在这里大放异彩,因为向后兼容性允许你切换到Java17而无需更改任何代码,并利用所有更新的功能。Java17是Java11以来又一个LTS(长期支持)版本,可确保你在较长时间内收到所有必要的安全更新。 (责任编辑:admin) |