有没有办法在不进行注释的情况下将处理器添加到编译器中?
基本上,如果用户没有正确实现接口(即不满足后置条件),我希望构建失败。在编译时,我想检查一个类是否实现了一个接口,如果是,则运行一些代码来检查实现是否正确。
例如,我想确保实现getErrorMoniker()的类在camelCase中返回一个字符串。
public interface MyError {
public String getErrorMoniker();
}
public class MyErrorImplemented1 {
@Override
public String getErrorMoniker() { return "goodErrorMoniker"; }
}
public class MyErrorImplemented2 {
@Override
public String getErrorMoniker() {
return "BADERRORMONIKER"; // I would like a compile error here
}
}
任何建议都将不胜感激。
答案 0 :(得分:1)
使用@SupportedAnnotationTypes("*")
注释的处理器理论上应该能够处理所有源文件,因为它也适用于一组空注释。来自documentation:
如果不存在注释类型,则仍会出现注释处理,但只有支持处理“*”的通用处理器才能声明(空)注释类型集。
虽然您检查返回值的目标可能不起作用,因为这发生在编译时,而不是运行时。