当前位置: 首页 > 后端技术 > Java

Java开发命名约定

时间:2023-04-01 22:56:01 Java

1.OptionalOptional是一个被严重低估的特性,它有潜力去除很多困扰我们的NullPointerException。这在代码边界(正在使用的API或正在公开的API)中特别有用,因为它允许您和您的调用代码推断预期的内容。但是,不加思索和设计地应用Optional会导致影响大量的类,并可能导致可读性较差。这里有一些关于如何有效使用Optional的技巧。Optional应该只用于返回类型......而不是参数,也不是字段。幸运的是,IntelliJIDEA允许您打开检查以查看您是否遵循了这些建议。遇到可选值就应该处理。IntelliJIDEA的建议会防止代码泄漏Optionals,所以请记得在任何地方找到Optionals进行处理,并迅速采取行动。Optional的功能不是简单地调用get()而是表示该值可能为空并让您处理它。所以在对它做任何事情之前一定要检查它的值。简单地调用get()而不首先检查isPresent()可能会在某些时候导致空指针。幸运的是,IntelliJIDEA也有检查功能可以提醒您注意这一点。可能有一种更优雅的方法将isPresent()与get()结合起来,这当然很棒……但也有更优雅的解决方案。您可以使用orElse在空值的情况下提供替代方案。...或者您可以使用orElseGet指示在值为null时调用哪个方法。这似乎与上面的示例相同,但供应商方法只会在需要时调用,因此如果这是一个昂贵的方法,使用lambda会有更好的性能。2.使用Lambda表达式Lambda表达式是Java8的主要特性之一。即使你没有使用过Java8,你现在也可能对它们有一个基本的了解。它们是一种新的Java编程方式,什么是“最佳实践”并不明显。以下是我喜欢遵循的一些准则。保持简短函数式程序员更喜欢较长的lambda表达式,但那些在Java中浸淫多年的人会发现将lambda表达式保持在几行代码中更容易。您甚至可能更愿意将其限制为一行代码,并且您可以轻松地将更长的表达式重构为一个方法。这些甚至可能成为方法参考。方法引用一开始可能感觉有点陌生,但坚持使用方法引用实际上是有价值的,因为它们在某些情况下有助于提高可读性,我将在稍后讨论。lambda表达式中缺少显式类型信息,因此您可能会发现为参数包含类型信息很有用。如您所见,这次它变得非常笨拙。所以我更愿意给参数一个有用的名字。当然,不管你有没有这样做,IntelliJIDEA都可以让你看到参数的类型信息。甚至lambda所代表的函数式接口:3.Lambda表达式的设计我觉得lambda表达式有点像泛型——有了泛型,我们经常会用到(比如给List<>添加类型信息),但是我们最好可以设计具有泛型类型(如Person)的方法或类。同样,当使用类似StreamsAPI的东西时,我们传递lambda表达式,但最好创建一个采用lambda参数的方法。但是,如果您发现自己处于其中一种情况,这里有一些很好的提示。IntelliJIDEA可以帮你引入功能参数。这允许您创建一个参数,有人可以在其中传递lambda而不是对象。这个特性的好处是它表明现有的功能接口与规范相匹配。这导致......使用现有的功能接口随着开发人员越来越熟悉Java8代码,我们将能够弄清楚使用Supplier和Consumer等接口时会发生什么,并创建一个原生的ErrorMessageCreator(例如example)可以是混乱和浪费。看看这个包,看看有什么已经可用。在函数式接口中添加@FunctionalInterface如果你真的需要创建自己的函数式接口,那么用这个注解来标记它们。这似乎没什么作用,但IntelliJIDEA会在您的接口与用于功能接口的异常不匹配时告诉您。当您没有指定要覆盖的方法时,它会标记:当您指定太多方法时,它会标记:如果您将它应用于类而不是接口,它会警告您:lambda表达式可用于具有单个抽象方法的任何接口,但它们不能用于符合相同标准的抽象类。似乎不合逻辑,但仅此而已。4.StreamStreamAPI是Java8的另一大特性,我认为我们真的不知道这会在多大程度上改变我们的编码方式。以下是我发现对排队点运算符有用的一些东西,我个人更喜欢排队我的流操作。当然,您不必这样做,因为我发现它对我有帮助:一眼就能看出我在做什么更容易调试(尽管IntelliJIDEA确实提供了在line,但拆分成不同的行会更简单)当我测试东西时,评论操作很容易插入peek()用于调试或测试此外,我认为它更整洁。如果我们遵循这种模式,我们在减少代码行方面不会有太大收获。您可能需要调整格式设置以对齐点运算符。使用方法引用是的,习惯这种奇怪的语法确实需要一段时间。但是,如果使用得当,它确实可以提高可读性。请参阅:与(相对)新的Objects类上的辅助方法相比:后者的代码更明确地说明要保存哪些值。IntelliJIDEA通常会让您知道何时可以将lambda折叠为方法引用。迭代集合时,在可行的情况下使用StreamsAPI……或新的集合方法,如forEach。IntelliJIDEA给你的建议是:一般来说,使用StreamsAPI比循环和if语句的组合更显式。例如:IntelliJIDEA建议这可以重构为:我所做的性能测试表明这种重构是令人惊讶的——性能是否保持不变、提高或变差并不总是可预测的。与往常一样,如果性能是您应用程序的关键,请在将一种风格移交给另一种风格之前对其进行测量。在遍历数组时使用循环但是,使用Java8并不一定意味着您必须在任何地方都使用流和新的集合方法。IntelliJIDEA会建议转换为流,但这并不意味着您必须回答“是”(记住检查可以被抑制或关闭)。特别是,遍历基本类型的小型数组几乎肯定会使用循环以获得更好的性能,并且可能(至少对于刚接触流的Java开发人员而言)更具可读性。与任何技术一样,规则不是一成不变的,但您应该决定是尽可能多地使用StreamsAPI,还是仍然对某些操作使用循环。简而言之,保持一致。