自定义注释以修改值

问题描述

我需要您的支持,感谢您对Java /注释的支持。

我要创建一个自定义批注f.e. @ModifyRegex注释变量 而我的方法是修改/替换带注释变量的部分值。

f.e.

@ModifyRegex
private String variable;


if:
 variable = "AbC-ABG-kkkk-4711";

then: 
 variable = "ABC-4711-ABG-kkkk";

我不确定是否可能,如果可以,请给我提供一个简单的代码示例。

谢谢

解决方法

注释处理器可以创建新的源文件。他们无法更改现有的。他们也无法读取内部方法。实际上,他们无法读取任何代码,因此,您可能看到的唯一字符串文字是它的文字(heh)。 Java lang规范定义了何时将分配给字段的值视为“编译时间常数”并直接写入。如果不是,则说:

class Example {
    // these are all NOT constant,therefore,cannot be
    // retrieved with an annotation processor
    long x = System.currentTimeMillis();
    Pattern p = Pattern.compile("^AbC-ABG-$");
    String s = null; // null is considered non-constant,for some reason.
    String z = "HELLO!".toLowerCase();
}

但是,如果它确实很简单,例如@Foo private String x = "Hello";,其中x是一个字段(而不是某个方法中的局部变量),是的,您可以看到它的作用。

但是您所能做的就是制作新文件。您无法更改现有文件。因此,充其量您可以使第二个类包含public static final String variable2 = "ABC-4711-...";

那龙目岛呢?

Project Lombok完成了我刚才说的您不能做的一切:检查实际代码,并 实时修改源文件。

不幸的是,lombok是几十万行代码,其中大部分都是必须做的:没有统一的方式来做,所以这是大量的自定义代码。更重要的是,从根本上讲,它也极其复杂:IDE一直都在进行代码分析,而且如果您更改结构,这会影响从“保存时自动格式化文件”到重构脚本再到“查找来电者,等等。由于没有标准,因此必须修补编辑器才能解决。

更改字符串常量可能意味着您不需要那么多修补程序。然后它仍然非常复杂。

Lombok是开源的,如果您想调查。

NB:我是Lombok项目的核心贡献者。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...