Java编程中静态部分分析详解

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(105)   2024-06-12 16:21:39

经常加入我们项目的新程序员问我们是否有自动格式化工具来使 Java 代码看起来完全符合 Qulice 期望的方式。 (Qulice 是我们使用的静态分析器。)我总是回答说,拥有这样一个自动代码抛光器只会有害,不会帮助项目及其成员改进和成长。这就是我这么认为的原因。

菲利普·诺伊斯 (Phillip Noyce) 的盲目狂怒 (1989)

静态分析,我们结合 read-only master branch 进行分析的方式,是对您的拉取请求进行完全自动化的严格审查,主要用于发现代码格式错误。假设我们希望整个存储库中的 Java 代码如下所示:

final class Doc {
  private final File file;
  public void remove() {
    if (this.file.exists()) {
      this.file.delete();
    }
  }
}

但是,您将其重构为更大任务的一部分,并提交如下拉取请求:

class Doc {
  private File f;
  public void remove()
  {
    if (f.exists())
      f.delete();
  }
}

对于你们中的某些人来说,这似乎没有什么大的区别,因为两个代码片段都可以毫无问题地编译并且以完全相同的方式工作。然而,对于我们这些存储库维护者来说,这是一件大事。我们确实希望我们的类始终是 final,我们确实希望它们是不可变的(因此所有属性也应该是 final),我们希望在所有属性引用前加上前缀 this.,我们希望代码以相同的方式格式化,因为我们相信代码的统一性会大大提高其可维护性。

当然,我们可以创建一个工具,您可以使用它来重新格式化代码,使其看起来像我们想要的那样。但在那种情况下,您永远不会了解项目需要您做什么以及为什么

您不会知道我们规则背后的原因。你永远不会想到他们。你不会真正关心他们。但它们不仅与空格和括号的格式有关。 Qulice 中有 900 多个,其中一些是专门为我们宣扬的面向对象哲学而设计的。

因此,简单地说,我们不希望您轻松完成静态分析阶段。我们希望你为了学习而受苦。

标签2: Java教程
地址:https://www.cundage.com/article/jcg-educational-aspect-static-analysis.html

相关阅读

Java HashSet 教程展示了如何使用 Java HashSet 集合。 Java哈希集 HashSet 是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性...
SpringApplicationBuilder 教程展示了如何使用 SpringApplicationBuilder 创建一个简单的 Spring Boot 应用程序。 春天 是用于创建企业应...
通道是继 buffers 之后 java.nio 的第二个主要新增内容,我们在之前的教程中已经详细了解了这一点。通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通...
课程大纲 Elasticsearch 是一个基于 Lucene 的搜索引擎。它提供了一个分布式的、支持多租户的全文搜索引擎,带有 HTTP Web 界面和无模式的 JSON 文档。 Elasti...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Java 是用于开发各种桌面应用程序、Web 应用程序和移动应用程序的最流行的编程语言之一。以下文章将帮助您快速熟悉 Java 语言,并迈向 API 和云开发等更复杂的概念。 1. Java语言...
Java中的继承是指子类继承或获取父类的所有非私有属性和行为的能力。继承是面向对象编程的四大支柱之一,用于提高层次结构中类之间的代码可重用性。 在本教程中,我们将了解 Java 支持的继承类型,...
Java Message Service 是一种支持正式通信的 API,称为 网络上计算机之间的消息传递。 JMS 为支持 Java 程序的标准消息协议和消息服务提供了一个通用接口。 JMS 提...
之前,我介绍了spring 3 + hibernate 集成 示例和struts 2 hello world 示例。在本教程中,我将讨论在将 spring 框架与 struts 与 hibern...
Java 项目中的一项常见任务是将日期格式化或解析为字符串,反之亦然。解析日期意味着你有一个代表日期的字符串,例如“2017-08-3”,你想把它转换成一个代表 Java 中日期的对象,例如Ja...