我如何将静态变量添加到类中,就像
Log4j2
中那样?
例如:
import lombok.extern.log4j.Log4j2;
@Log4j2
public class TestClass {
public void test() {
log.info("test");
}
}
生成的源类如下所示:
public class TestClass {
@Generated
private static final Logger log = LogManager.getLogger(TestClass.class);
public void test() {
log.info("test");
}
}
我创建了扩展
javax.annotation.processing.AbstractProcessor
的类,并尝试通过添加一些静态字符串来修改原始类,但我不知道如何正确执行:/
@SupportedAnnotationTypes("TestAnnotation")
@SupportedSourceVersion(SourceVersion.RELEASE_17)
public class TestProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element element : roundEnv.getElementsAnnotatedWith(TestAnnotation.class)) {
if (element.getKind().isClass()) {
// ???
}
}
return true;
}
}
我想要类似的东西:
@TestAnnotation
public class TestClass {
public void test() {
System.out.println(testString); // testString is inserted by TestProcessor
}
}
不幸的是,Java 注解处理不能用于修改现有代码,只能生成新代码。您引用的
Log4j2
注释属于Lombok,它是一种与注释处理器不同的野兽。
这取决于您具体需要什么,但一般来说,您可以:
TestClass
并使用自定义行为覆盖有问题的方法)我确信还有其他选项,但正如我所说,这些选项取决于您的特定用例。