java - 如何防止 Eclipse 在将表达式分配给局部变量时生成类型注释

标签 java eclipse annotations

假设我有这样的 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

作为记录,我还提交了 enhancement request 565463 .

(现实世界的 API 声明此类注释是为了更好的 Kotlin 互操作性(使用 JetBrains 注释),因为 Kotlin 可以使用它来区分 TT? ,并避免 T!)

最佳答案

@NotNull ,当且仅当未启用或配置错误基于注释的空分析时,才会添加您不需要的内容。

项目 > 属性:Java > 编译器中的空分析部分:

  1. 确保选中启用基于注释的空分析复选框
  2. 不要选中对空规范使用默认注释复选框,而是单击配置...链接并配置 test.NotNull (或 org.jetbrains.annotations.NotNull )作为'NonNull'注释

请注意,仅 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是什么意思方法?根据Javadoc of org.jetbrains.annotations.NotNull (“...禁止返回空值(对于方法)...”),目标 ElementType.METHOD似乎是在这里错误添加的,因为它没有引用 method declaration .

关于java - 如何防止 Eclipse 在将表达式分配给局部变量时生成类型注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63036897/

相关文章:

java - 如何在 Java 中计算时间跨度并格式化输出?

java.lang.NoSuchMethodError 仅适用于树莓派

Java 文件 : Suppressing hardcoded text warnings

java - 重写方法中的方法参数注释

java - scala反射错误java

java - Java 中的 OpenCV,为什么我不能使用 Mat.CvType.CV_8UC1?

java - 在 Java ME 中将日期保存到 RMS

java - 在 Eclipse 中内联所有静态导入

android - 使用 Eclipse 和 Phonegap/Cordova 3 进行开发

JAVA : How to get the name of variable with annotation in Java?