【问题标题】:Not annotated parameter overrides @??? parameter未注释的参数覆盖@???范围
【发布时间】:2019-11-03 05:39:30
【问题描述】:

覆盖代码时:

    @Override
  public void open(ExecutionContext executionContext) {
    super.open(executionContext);

来自:org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader

我收到 IntelliJ 警告:

未注解的参数覆盖@???参数少... (Strg+F1) 检查信息:报告与常量条件和异常检查中配置的 @Nullable 和 @NotNull 注释使用相关的问题。

我能做些什么来避免这种情况?

【问题讨论】:

    标签: spring intellij-idea warnings nullable notnull


    【解决方案1】:

    说明

    虽然我无法在 AbstractItemCountingItemStreamItemReader 上从这个工件复制这个

    实施组:'org.springframework.batch',名称:'spring-batch-core',版本:'4.1.2.RELEASE'

    ,这个注解表示父方法在参数上有一些@NotNull/@NonNull注解,而覆盖方法没有。

    要修复它,您需要在覆盖方法上放置相同的注释。

    正如我所写,我下载的版本中没有这样的注释,但检查你的来源并从那里复制参数注释。

    此警告有时会出错,因此它可以帮助重新启动 IDEA。当我尝试编写一个简单的示例来重现警告时,重新启动会有所帮助。

    一个简单的可重现示例

    父类:

    package com.dpopov.java.stackoverflow;
    
    import org.springframework.lang.NonNull;
    import org.springframework.lang.Nullable;
    
    public class ParentClass {
        public void nonNullMethod(@NonNull String string) {
            System.out.println("S is: " + string);
        }
    
        public void nullMethod(@Nullable String string) {
            System.out.println("S is: " + string);
        }
    }
    

    儿童班:

    package com.dpopov.java.stackoverflow;
    
    public class NonNullOverride extends ParentClass {
    
        public static void main(String[] args) {
            NonNullOverride nonNullOverride = new NonNullOverride();
            nonNullOverride.nonNullMethod(null);
            nonNullOverride.nullMethod(null);
        }
    
        @Override
        public void nonNullMethod(final String string) {
            super.nonNullMethod(string);
    
            if (string.equals("666")) {
                System.out.println("yes");
            }
        }
    
        @Override
        public void nullMethod(final String string) {
            super.nullMethod(string);
    
            if (string == null) {
                System.out.println("I am null, it can be.");
                return;
            }
    
            if (string.equals("666")) {
                System.out.println("yes");
            }
        }
    }
    
    • 为了 100% 确定,我已将 org.springframework.lang.NonNullorg.springframework.lang.Nullable 注释添加到检查 Java | Probable bugs | @NotNull/@Nullable problems 的相应 Nullable / NonNull 注释中(在 File | Settings | Editor | Inspections 中)。您可以通过按Configure annotations 按钮来执行此操作(请参见屏幕截图)。

      • 因此,我收到了关于儿童班#nonNullMethod 的警告:
      • 特别注意,非注释 @Nullable 方法不会引发任何警告。
      • 警告仅在 IDEA 重启后有效。
      • 如果您打开/关闭检查设置中的复选框并尝试重现它们,整个检查看起来工作起来相当麻烦。因此,再一次,重新启动/使缓存无效可能有助于摆脱或显示不正确的警告。

    【讨论】:

      猜你喜欢
      • 2019-09-24
      • 2019-11-11
      • 2017-03-31
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多