注释上的自定义Eclipse警告

was*_*sup 9 java eclipse annotations

假设我有一个内部方法,只能在某些情况下使用.

在Eclipse中,是否有可能将其标记为内部并在用于阻止我或将使用我的API的人误用而不知道他们正在做什么时显示警告.我无法更改其可见性,因为它也可能在其他包/非扩展类中使用.

像这样的东西:

@Internal
public void doSomeInternalStuff()
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后,在Eclipse中发出警告:

在此输入图像描述

你明白了.

有希望吗?

man*_*uti 10

JSR269(可插入注释处理器API)允许您编写自定义注释处理器,可以处理自定义注释并使您能够使用a打印错误或警告javax.annotation.processing.Messager.以下是一个例子.

import java.util.Set;

import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic;

@SupportedAnnotationTypes("fully.qualified.name.of.InternalAnnotationType")
@SupportedSourceVersion(SourceVersion.RELEASE_6)
public class CustomAnnotationProcessor extends AbstractProcessor {

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        for (Element element : roundEnv.getElementsAnnotatedWith(InternalAnnotationType.class)) {
            InternalAnnotationType internalAnnotation = element.getAnnotation(InternalAnnotationType.class);
            String message = "The method " + element.getSimpleName()
                       + " is marked internal and its use is discouraged";
            processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING, message);
        }
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

在Eclipse中,您可以在Java编译器中注册注释处理器,方法是右键单击项目,然后选择Properties - > Java Compiler - > Annotation Processing - > Factory Path并添加包含自定义注释处理器的Jar.是一篇有趣的文章,解释了细节.

或者,您可以将所有"内部"方法API放在专用类中,并在Eclipse构建路径中为该类添加访问规则,以便项目中依赖于此类的任何代码都会显示警告.


Sto*_*fan -3

阅读 Herbert Schildt 的书“Java:初学者指南”中有关内部方法的链接:http://www.amazon.com/Java-Beginners-Guide-5th-Edition/dp/0071606327