gpt4 book ai didi

java - 如何在自己的 API 中给出警告信息?

转载 作者:太空狗 更新时间:2023-10-29 22:57:55 26 4
gpt4 key购买 nike

是否可以像下面这样在我自己的 API 中提供自定义警告消息? Resource leak:'ois' is never closed 消息是否与 Java API 或 JVM 相关?

enter image description here

最佳答案

可以使用编译器 API。您必须扩展一个 AbstractProcessor,然后确保编译器知道它。

假设我们不喜欢程序员对源代码发誓。所以,当有人定义一个名为“shit”的字段时,我们想要显示一个警告。这是一个简单的实现:

import java.util.List;
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.ElementKind;
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic.Kind;

@SupportedSourceVersion(SourceVersion.RELEASE_7)
@SupportedAnnotationTypes("*")
public class Test extends AbstractProcessor {
public int shit;
public int foo;

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
Set<? extends Element> rootElements = roundEnv.getRootElements();

for (Element element : rootElements) {
if (element.getKind() == ElementKind.CLASS) {
List<? extends Element> classElements = element.getEnclosedElements();

for (Element classElement : classElements) {
if (classElement.getKind() == ElementKind.FIELD) {
if (classElement.getSimpleName().contentEquals("shit")) {
processingEnv.getMessager().printMessage(
Kind.WARNING,
"How dare you to swear in the source code?!",
classElement
);
}
}
}
}
}

return false;
}

public static void main(String[] args) {
//
}
}

现在,我们只想为这个类应用这样的处理器,因为还有一个丑陋的 bad-called 字段。

使用命令行:

javac Test.java
javac -processor Test Test.java

我们需要先构建一个处理器,然后在编译时应用它(在本例中是同一个文件)。

这是我们得到的输出:

Test.java:17: warning: How dare you to swear in the source code?!
public int shit;
^
1 warning

要在 Eclipse 或任何其他 IDE 中出现相同的警告,有必要更改编译器设置,以便它使用此自定义处理器。

更新:在评论中,kapep 发送了一个关于如何在 Eclipse 中设置自定义处理器的链接:http://kerebus.com/2011/02/using-java-6-processors-in-eclipse/


仅作记录:通过实现接口(interface) Closeable 可以实现完全相同的警告:

import java.io.Closeable;
import java.io.IOException;

public class Test implements Closeable {
@Override
public void close() throws IOException {
// TODO Auto-generated method stub
}

public static void main(String[] args) {
new Test();
}
}

你会看到同样的警告:

enter image description here

关于java - 如何在自己的 API 中给出警告信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23222607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com