我正在读取错误日志文件,并且正在检查错误行是否引用了注释。我尝试了文档但没有结果,但是注释(或自定义注释)会抛出异常吗?
非常感谢。
答案 0 :(得分:3)
注释不会执行,因此它们不会引发异常。
答案 1 :(得分:3)
注释可以通过两种方式处理:
换句话说:注释本身与任何真实代码都不相似,它只是一个“标记”。但是,当然,为了做一些有用的事情(尤其是在运行时),可能存在一些注释存在时会执行不同操作的代码。当然,该代码可以引发异常。但是在这种情况下,您应该会收到堆栈跟踪和希望有用的消息。
从这个角度来看:注释本身不能引发异常,因为注释本身与可以“执行”的东西不相似。或者从J-Alex的其他答案中窃取措辞:注解可能会导致异常,但它们不能成为“来源”。
答案 2 :(得分:2)
注释可能是引起异常的原因,但不能抛出该异常,因此它只是注释处理器的标记。
这是一个虚拟的示例,如何将Annotation
引起Exception
:
public class Main {
@ValidNumber
public String number = "1234X5";
public static void main(String[] args) {
new AnnotationProcessor().scan();
}
}
class AnnotationProcessor {
private String regex = "\\d+";
void scan() {
Main m = new Main();
for (Field field : m.getClass().getDeclaredFields()) {
ValidNumber annotation = field.getAnnotation(ValidNumber.class);
if (annotation != null)
process(m, field);
}
}
void process(Object target, Field field) {
try {
Object o = field.get(target);
if (!o.toString().matches(regex))
throw new IllegalStateException("Wrong number in the class " + target);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface ValidNumber {
}
输出:
Exception in thread "main" java.lang.IllegalStateException: Wrong number in the class com.test.Main@5c3bd550
at com.test.AnnotationProcessor.process(Main.java:32)
at com.test.AnnotationProcessor.scan(Main.java:24)
at com.test.Main.main(Main.java:12)
这是一个如何处理RUNTIME
注释的示例。