java - 将表达式分配给局部变量时如何防止Eclipse生成类型注释
问题描述
假设我有这样的 Java 代码:
package test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
public class Test {
@NotNull
public static Object object() {
return new Object();
}
public static void test() {
object();
}
}
@Target({ ElementType.METHOD, ElementType.TYPE_USE })
@interface NotNull {}
当我在“object();”上使用快速修复 ( Ctrl+ 1) 操作“将语句分配给新的局部变量”时 打电话,我得到这个:
public static void test() {
@NotNull
Object object = object();
}
我不想在我的客户端 Java 代码中添加注释,因为它对我来说只是噪音。我怎样才能防止它一直被生成,而是得到它?
public static void test() {
Object object = object();
}
所有这一切都只发生在注释有 时@Target(TYPE_USE)
,并且只有在org.eclipse.jdt.core.compiler.compliance=8
或以后.settings/org.eclipse.jdt.core.prefs
作为记录,我还提交了增强请求 565463。
(现实世界的 API 正在声明此类注释以实现更好的 Kotlin 互操作性(使用 JetBrains 注释),因为 Kotlin 可以使用它来区分T
andT?
和避免T!
)
解决方案
当且仅当未启用或错误配置基于注释的空分析@NotNull
时,才会添加在您的情况下不需要的。
在Project > Properies: Java > Compiler部分Null analysis中:
- 确保选中启用基于注释的空分析复选框
- 而不是选中Use default annotation for null specification复选框,单击Configure...链接并将(或)配置为
test.NotNull
“NonNull”注释org.jetbrains.annotations.NotNull
请注意,只会添加ElementType.TYPE_USE
注释。对于带有ElementType.TYPE_USE
注解的方法(不能添加到void
方法中),注解指的是返回类型,而不是方法本身。换句话说,当调用这样的方法时,您会得到一个带注释的对象。对我来说,为变量的类型添加使用类型注释是预期的行为。
只有在您的情况下具有两个目标的注释和. 注释是指返回类型(因此添加它是有意义的)还是方法是指方法本身(因此不应添加)?ElementType.TYPE_USE
ElementType.METHOD
请不要也,相反org.jetbrains.annotations.NotNull
org.eclipse.jdt.annotation.NonNull
没有目标ElementType.METHOD
。方法声明怎么可能null
?方法的意义是什么@NotNull
?根据( "... null value is allowed to return (for methods)..." )的Javadocorg.jetbrains.annotations.NotNull
,目标似乎在这里被错误地添加了,因为它没有引用方法声明。ElementType.METHOD