我有以下简单的代码,用于测试使用Maven的FindBugs @NonNull注释.我执行
mvn clean install

而且由于print(null)违反了非空条件,因此无法正确生成.

您可以使用类注释将NonNull设置为类中所有方法参数的默认值

@DefaultAnnotation(NonNull.class)

如何将NonNull设置为给定包(和子包)下的所有类中的所有方法参数的默认值?

的src /主/爪哇/测试/ Hello.java

package test;
import edu.umd.cs.findbugs.annotations.NonNull;
public class Hello {
    static public void print(@NonNull Object value) {
        System.out.println("value: " + value.toString());
    }

    static public void main(String[] args) {
        if (args.length > 0) {
            print(args[0]);
        } else {
            print(null);
        }
    }
}

的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>hello</groupId>
  <artifactId>hello</artifactId>
  <version>1.0</version>

  <dependencies>
    <dependency>
      <groupId>net.sourceforge.findbugs</groupId>
      <artifactId>annotations</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>net.sourceforge.findbugs</groupId>
      <artifactId>jsr305</artifactId>
      <version>1.3.7</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>2.5.2</version>
        <configuration>
          <includeTests>true</includeTests>
        </configuration>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>check</goal>
            </goals>
          </execution>
          <execution>
            <id>findbugs-test-compile</id>
            <phase>test-compile</phase>
            <goals>
              <goal>check</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

解决方法

您可以为单个软件包执行此操作,但是我还没有找到一种方法来传播到子包.对于方法参数,使用内置程序包注释 @ParametersAreNonnullByDefault.将注释应用到程序包目录中的package-info.java文件中的程序包.

Note that I’m using the javax.annotation annotations from 07001 which FindBugs honors.

COM /示例/富/ package-info.java

/**
 * Package that doesn't allow null values as method parameters.
 */
@ParametersAreNonnullByDefault
package com.example.foo;

import javax.annotation.ParametersAreNonnullByDefault;

对于字段和方法返回值,您需要创建自己的注释.我通过复制ParametersAreNonnullByDefault的源并更改ElementType枚举来做到这一点.

COM /示例/ UTIL / FieldsAreNonnullByDefault.java

package com.example.util;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

import javax.annotation.Nonnull;
import javax.annotation.Meta.TypeQualifierDefault;

/**
 * Applies the {@link Nonnull} annotation to every class field unless overridden.
 */
@Documented
@Nonnull
@TypeQualifierDefault(ElementType.FIELD)  // <-- use METHOD for return values
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldsAreNonnullByDefault
{
    // nothing to add
}

几个月前,我开始从头开始重写一个相当复杂的系统,每个包都应用了这三个注释(字段,参数和返回值).出于避免空值的动机的一个好处是在适当的情况下使用Null对象模式.尽可能地结合最终的领域,只做一件事的小班子真的保持了代码的清洁.

java – 将findbugs NotNull设置为一个包下的所有类的默认值的更多相关文章

  1. PMD,checkstyle和findbugs android设置

    如何使用最新版本的gradle为Android项目设置PMD,Findbugs和Checkstyle静态代码分析工具?之后我就可以执行任务了

  2. java – 如何配置FindBugs maven插件以仅检查@Nonnull之类的注释违规?

    我已经实现了thisquestion的答案,因此@Nonnull违规使构建失败.但问题是,这是发现很多其他我不想处理的错误.我已经看了themanual,并没有任何一节跳出来作为一个,“这是你如何配置要检查的章节”.对我来说,它看起来像itshouldbeinhere,但选项的数量似乎不够全面.我如何配置findbugs只关心findbugs注释?

  3. 如何正确使用FindBugs的@CheckForNull,@ Nonull和@Nullable注释

    我想正式注释我的函数签名以澄清他们的契约–特别是如果允许或禁止nullparams和返回值–以FindBugs的静态代码分析工具(可能还有其他)可以使用它的方式.有两个包(annotations.jar和jsr305.jar),每个包都有四个注释,以及不添加注释的选项.解决方法经过一些尝试后,这些是我的发现:方法参数:>参数不能为null:不要放任何注释.在这种情况下,如果将null传递给方法,则

  4. java – 从实例方法“findbugs”警告中修改“写入静态字段”的最佳方法是什么?

    我有一个类似于此类,findbugz抱怨“从实例方法.我不能在ctor中设置静态字段.>这个问题最好的解决办法是什么?会把staticField放在atomicreference中吗?解决方法尽可能靠近您的原始设计…通过类名参考你的静态变量,这将删除findbugz警告.将静态变量标记为volatile,这将使多参数环境中的引用更加安全.更好的是:

  5. java – 如何对同一行代码抑制多个FindBugs警告

    我最近发现了FindBugs的@edu.umd.cs.findbugs.annotations.SuppressWarnings注释,这是非常酷的,并允许你基本上告诉FindBugs忽略某些警告.我已经成功地实施了我自己的SLF4J绑定,遵循他们的建议,采取slf4j简单,并用自己的记录器和记录器工厂绑定修改它,我很高兴地说它的作用就像一个魅力.我刚刚在包含这个SLF4J绑定的包中发现错误,并且抱

  6. java – 将findbugs NotNull设置为一个包下的所有类的默认值

    我有以下简单的代码,用于测试使用Maven的FindBugs@NonNull注释.我执行而且由于print违反了非空条件,因此无法正确生成.您可以使用类注释将NonNull设置为类中所有方法参数的默认值如何将NonNull设置为给定包(和子包)下的所有类中的所有方法参数的默认值?

  7. java – Maven Codehaus findbugs插件“onlyAnalyze”选项无法按预期工作

    我似乎无法仅仅为我的多模块项目工作:无论我设置了什么包(或模式),maven-findbugs-plugin都不会评估子包,因为我希望传递包名.*.为了证明自己或插件有问题(虽然我总是认为它是前者!),我设置了一个具有以下结构的小型Maven项目:这很简单!我宁愿不使用包含/排除XML,因为这需要更多的设置和推理,我目前没有时间…解决方法引用Findbugsmanual:“替换.*与.-同时分析所有子包”

  8. 抑制Java Findbugs错误(EI_EXPOSE_REP)

    我有一个Javagettor方法,如下所示:和Findbugs报告这暴露了一个可变对象:“可以通过返回对可变对象的引用来公开内部表示”.我将代码更改为:但Findbug仍然报告相同的漏洞.我还能做些什么来抑制/解决这个问题?我在IntellJ10Findbugs插件中运行Findbugs1.3.9.解决方法我刚刚意识到Findbugs分析了编译代码,而不是源代码.在重建和重新运行Findbugs之后,问题就消失了.

  9. java – Findbugs与Google CodePro AnalytiX(Eclipse插件)

    还有一个问题相关:这些插件都没有将我们的代码发送到服务器,对吧?

  10. java – 如何检测新值已添加到枚举中,并且不在交换机中处理

    我不时要在项目的枚举类型中添加一个新值.我想要的是每个我没有处理新值的开关都有编译时错误,如下所示:有一个默认:抛出一些异常是不够好的,我希望它是编译时间.我不认为这是可能的,但也许有人有一个巧妙的把戏……

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部