【问题标题】: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");
}
}
}