JavaRush /Java 博客 /Random-ZH /喝咖啡休息#109。目前 Java 开发中最需要的技能。消除代码混乱的 7 个 Java 可选技巧

喝咖啡休息#109。目前 Java 开发中最需要的技能。消除代码混乱的 7 个 Java 可选技巧

已在 Random-ZH 群组中发布

目前 Java 开发中最需要的技能

来源:Medium Java 仍然是最流行和最受欢迎的编程语言之一,尽管它已经有近四分之一个世纪的历史了。因此,可以合理地假设 Java 的受欢迎程度将继续增长,并且未来雇主对 Java 开发人员的需求将会更大。 喝咖啡休息#109。 目前 Java 开发中最需要的技能。 消除代码混乱的 7 个 Java 可选技巧 - 1为了创造高质量的产品,开发人员需要跟上最新的 Java 工具并提高他们的技术技能和知识。下面我们介绍 Java 开发人员所需的六项基本技能。

1. 精通Java 8

尽管较新版本的 Java 已被广泛使用,但所有有抱负的 Java 开发人员都需要深入了解 Java 8 并获得经验。Java 8 的一些最有用的功能包括:
  • 用于创建具有方法实现的接口的标准和静态方法。
  • 一种只有一个抽象方法的函数式接口,可以帮助开发人员避免添加其他抽象方法。
  • 有助于创建函数式接口的 Lambda 表达式。
  • Java Stream API 支持并行和顺序执行。
  • Collection API 中的新方法。
所有这些特性使得 Java 8 对于函数式编程来说不可或缺。函数式编程提供并发性和代码简洁性,并有助于使用优化的代码创建高负载应用程序。Java 8 也成为本机代码优化的基础,允许对 Scala、Kotlin 和 Grails 等其他语言的开发进行优化。

2、有测试经验

Java 中的单元测试是一个相当有争议的话题。一些开发人员认为编写单元测试是浪费时间,但我们坚信单元测试技能是任何专业 Java 开发人员都必须具备的技能。单元测试允许您测试各个代码块并确保最终产品正常运行。因此,如果开发人员想要提高自己的技能和知识,他需要学习如何使用最流行、最有效的测试工具。您需要熟悉的主要测试框架是 JUnit 5 库。其他工具包括:
  • 机器人框架
  • 莫基托
  • 电源模拟
除了单元测试之外,Java 开发人员不应忘记其他测试方法(系统测试、验收测试和集成测试)。这使您可以对软件进行全面的测试,并确保没有错误、错误或严重故障。关于测试要记住的主要一点是,小变化会带来大结果。如果您毫不犹豫地将时间和精力投入到单元测试中,您将会对工作质量的提高感到惊讶。

3. 开发运营

尽管不是必需的,但了解 DevOps 及其原则对您作为开发人员和您工作的公司来说都是有益的。DevOps 流程的灵活性和组织性使公司能够优化产品质量并简化运营。并提高流程的透明度。Java中的DevOps本质上是DevOps在Java开发中的应用。这包括:
  • 持续交付和集成。
  • 使用微服务而不是整体服务。
  • 基础设施即代码。
  • 自动化测试。
DevOps 是一个广阔的领域,需要大量的时间和资源来研究它。但如果你是一名 Java 开发人员,学习 DevOps 将是有益的,因为它将使你将来成为一名 DevOps 工程师。如果您不想成为 DevOps 工程师或者您的公司对此不感兴趣,那也没关系。请记住,DevOps 在 Java 社区中变得越来越流行。

4.了解Java库和API。

由于 Java 是世界上领先的编程语言之一,因此它拥有大量可用的 API 和库也就不足为奇了。这些工具极大地简化了开发过程,使开发人员能够快速创建可靠的软件。下面我们列出了一组基本工具,任何优秀的 Java 开发人员都知道并且可以自信地使用它们。这些工具可帮助您快速构建应用程序并有效管理数据及其存储:
  • Gradle(构建应用程序的工具);
  • Maven(有点过时但仍然流行,也用于构建应用程序);
  • Java 8 标准包;
  • Spring框架;
  • JPA ORM(Hibernate、TopLink);
  • NoSQL 数据库(MongoDB、Cassandra)。
至于 API,要使用核心 Java API,开发人员需要充分了解 OpenJDK、Android、Oracle 和 IS2T。这些工具的一大优点是它们都附带详细且信息丰富的文档。而且,开发者总能得到社区的支持,这也是一大优势。

5. 对Spring和Spring Boot有信心的知识

Spring 框架是开发基于 Java 的应用程序最常用的框架,因此开发人员了解如何使用它非常重要。Spring 的主要优点之一是依赖注入,它允许您创建松散耦合的应用程序并为开发人员提供更大的灵活性。Spring也非常轻量级,支持XML配置、注释和声明式编程。所以如果你想掌握Java开发技能,你还应该掌握Spring部署。Spring Boot 是 Spring 的迭代,为快速部署应用程序提供了便捷的工具。可以肯定地说,Spring Boot 使用 Spring 作为基础,并在其之上构建了自己的功能。Spring 注重灵活性,而 Spring Boot 有助于减少代码并简化开发过程。它为开发人员提供开箱即用的功能,帮助构建独立的应用程序,并且总体上更易于启动和管理。Spring Boot 非常适合需要快速构建的微服务和应用程序,因为它可以快速轻松地为各种环境(生产、测试​​、质量、CI/CD)设置和运行应用程序。Spring和Spring Boot都扩展了React编程能力,这是开发者社区的另一个热门趋势。例如,Spring 5 现在使用 WebFlux 来实现响应式方法来编程和解决复杂的分布式系统。

6. 大数据经验

大数据是一个不断增长的趋势,开发人员必须遵循和采用才能满足市场需求。专业Java开发人员可以熟悉的主要工具有:
  • 阿帕奇火花
  • 阿帕奇·卡夫卡
  • Hadoop(用于批处理)
Apache Spark 是一个分布式大数据处理平台,为 Java 提供本机绑定。该框架因其功能和性能而变得非常受欢迎,并且是目前 Java 社区中最受欢迎的大数据工具。Apache Spark 可以在集群独立模式下运行,为此您只需要一个 Apache Spark 环境和一个 JVM(对于集群中的每台机器)。Spark 的速度也非常快,并且具有非常用户友好的 Spark API。Hadoop 是一个 Java 开发人员也熟知的数据存储平台。尽管 Hadoop 的速度不如 Spark,但它仍然是最流行的大数据处理工具之一。这也是由于 Hadoop(以及类似的解决方案)拥有大量插件,可以让您高效地解决大数据处理问题并普遍优化 Hadoop 性能(包括对实时流处理的支持)。

消除代码混乱的 7 个 Java 可选技巧

一位 Java 开发人员在 Reddit 上写道:“我的一些 同事不知道Optional的存在。” 我们是否可以认为Optional提高了代码的“可读性”?值得一直使用吗?哪里完全不需要使用Optional?由于许多开发人员仍然不知道如何正确使用Optional,我将给出7个Optional滥用的例子以及如何处理它们。 喝咖啡休息#109。 目前 Java 开发中最需要的技能。 消除代码混乱的 7 个 Java 可选技巧 - 2

1. 不要使用Optional进行空检查

使用可选而不是空检查只会增加混乱。这样做没有任何好处。使用Optional 以及isPresentget方法也是一个错误。开发人员认为get应该按预期工作。然后他们添加isPresent并返回空检查。请记住,Optional 不会修复您的空检查。下次您看到isPresentget(或ElseThrow)时,请更改这段代码。使用映射和orElse删除标准空检查,并更有选择性地使用Optional。这是一个很好的例子:
var user = userService.getCurrentUser();
if(user == null) {
    return "(unknown)";
}
var username = user.getUsername();
if (username == null) {
    return "(unknown)";
}
return username;
vs

var user = userService.getCurrentUser();
if(user.isEmpty()) {
    return "(unknown)";
}
var username = user.orElseThrow().getUsername();
if (username == null) {
    return "(unknown)";
}
return username;
vs

return userService.getCurrentUser()
                  .map(User::getUsername)
                  .orElse("(unknown)");
您可以从可选目标开始。Optional 的目的是表示可选的、缺失的值。然后回到你的问题,看看它是否适合你。处理 null 检查的另一种方法是使用注释。NullableNotNull应该可以正常工作。确实,它们会污染您的代码,并且它们仅在编译时提供保护。要检查运行时,请使用Objects.requireNonNull

2. 进行适当的错误处理

有时null代表异常。这是发出错误和异常信号的错误方式。“出了点问题,这里是空的”是应该避免的反模式。另外,您不应该使用Optional 来覆盖异常。这是一个例子。
public Optional<MyObject> getMyObject(final String jql) {
    try {
        return Optional.ofNullable(get(sql));
    } catch (final JqlParseException e) {
        return Optional.empty();
    }
}
为什么myObject是空的?这要么是错误,要么是空值。因此,您将再次得到一个不明确的结果,并因此消除了可选的好处。这段代码的存在是因为人们试图使用Optional来控制流程。可选将从您的代码库中删除一些零。但您仍然需要使用 try-catch 构造来处理异常。使用try-catch来正确处理异常。处理错误时不要删除Optional,只需等待,它就会完美运行。但这里有一个例外——空catch。当您不知道在空 catch 中返回什么时,空的Optional应该可以正常工作。
private int readExpirationAsInt(Milk milk)
{
  String expiration = milk.getExpiration();
  try {
    return Integer.parseInt(expiration);
  }
  catch(NumberFormatException ignored) {}

  return 0;
}


private OptionalInt readExpirationAsInt(Milk milk)
{
  String expiration = milk.getExpiration();

  try {
    return Optional.of(Integer.parseInt(expiration));
  }
  catch(NumberFormatException e) {
    return OptionalInt.empty();
  }
}

3. 不要从可选方法返回 null

public static Optional<POSType> getPOSType(String posName) {
    if (StringUtils.isNotBlank(posName)) {
        return Arrays.stream(POSType.values())
                .filter(type -> type.toString().equalsIgnoreCase(posName))
                .findFirst();
    }
    return null;
}
这违背了Optional的目的。这是糟糕测试的另一个例子。由于输入为空,这意味着我们需要一个IllegalArgumentException文件。另外,这是一个错误。没有人需要检查可选调用方法。返回一个空的可选元素,并且从不检查可选元素是否为空。

4. 不要对集合使用Optional。

不需要将集合包装在Optional中。此外,不要将Options放入集合中。这只会让事情变得更加复杂,因为增加了毫无意义的拳击和额外的展开。不要将Options 添加到集合中。这样做没有明显的好处。保持简单并对缺失值使用Optional。

5. 不要为了链接而链接

Optional.ofNullable(foo).ifPresent(value -> {
  //do something
})
可选有详细的方法可以帮助解决这个问题。代替链,一个简单的空检查就足够了。我知道Optional有很好的方法和良好的IDE支持。你可以使用它们。

6. 使用原始值包装器

这不是一个大问题,但您可以使用OptionalIntOptionalLong。只需删除不必要的泛型,您就可以提高性能并编写更简洁的代码。

7. 你应该了解 ofNullable

if (a==null){
  return Optional.empty();
} else {
  return Optional.of(a);
}
此类代码通常是由不了解Optional#ofNullable 的开发人员编写的。大多数开发人员甚至不理解ofNullableof之间的区别。他们不明白Optional#of为何会适得其反。大多数人会求助于ofNullable因为担心在Optional#of中抛出NullPointerException。这再次违背了这两种方法的目的。如果我们只使用ofNullable,为什么我们还需要Optional#of呢? 当您传递给 null 时, Optional#of会引发 NPE。发生这种情况是有原因的。当您期望该值存在时,应使用此方法。如果它不存在,它很快就会失败。 Optional#ofNullable将 null 转换为空的Optional。该方法接受 null 作为参数,它匹配一个空的Optional。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION