Java 无法在IDE中使用AbstractProcessor

Java 无法在IDE中使用AbstractProcessor,java,intellij-idea,netbeans,annotation-processing,Java,Intellij Idea,Netbeans,Annotation Processing,动机: 在我们的代码中,我们有几个地方,其中一些方法是按名称运行的。有一些大的if-else-if块,其中包含每个函数名和相应方法的调用(我使用术语function来描述名称,例如functionX01可能对应于方法SomeClass.functionX01)。我一直在寻找改进的方法 目标: 只编写带有一些自定义注释的方法,这样就不需要更新甚至包括if-else if块来运行特定函数。如果生成了任何代码,则可以访问任何生成的代码 我所做的: 我使用运行时注释创建了第一个概念验证,它被证明是成功的

动机:

在我们的代码中,我们有几个地方,其中一些方法是按名称运行的。有一些大的
if-else-if
块,其中包含每个函数名和相应方法的调用(我使用术语function来描述名称,例如function
X01
可能对应于方法
SomeClass.functionX01
)。我一直在寻找改进的方法

目标:

只编写带有一些自定义注释的方法,这样就不需要更新甚至包括
if-else if
块来运行特定函数。如果生成了任何代码,则可以访问任何生成的代码

我所做的:

我使用运行时注释创建了第一个概念验证,它被证明是成功的,但比
if-else if
慢。下一次尝试是源注释

我以link为例,但它并没有在IntelliJ中运行。我想要的是——在本例中,
PersonBuilder
类被生成,而不是没有。在某些情况下,在构造处理器对象javax.annotation.processing.Processor:Provider BuilderProcessor未找到时引发了错误
error:java:Bad service configuration file,或引发异常

在谷歌搜索了一段时间后,找不到任何东西,我转向了这本书(核心Java,第二卷-高级功能-第九版,波兰语翻译版),建议运行以下命令:

javac [AbstractProcessor implementation]
javac -processor [Compiled Processor] [other source files to compile]
然而,这是有效的,但并不令人满意,因为它需要在构建过程中自动在IDE内部发生(具体来说是NetBeans和IntelliJ)。代码不需要动态生成,但程序员必须在构建后有权访问它(例如,能够调用生成的类的方法)

问题:

如何拥有和使用NetBeans和IntelliJ中使用的生成代码,而无需使用外部工具?是否可能,或者使用反射、运行时注释或外部工具是唯一的方法

其他信息(以防万一):

语言级别:Java1.8

JVM版本:12和13


IDEs:NetBeans和IntelliJ

你不能用lambdas来实现你在问题开头的“动机”部分所描述的吗?若否,原因为何?如果可以,为什么您更喜欢走另一条路(即使用注释)?如果我完全误解了您的问题,我深表歉意。我没有考虑lambdas,因为我不认为它们有什么用处。最终的目标是,如果,或者至少让它生成,就删除它。据我所知,Lambdas没有提供这种机制,但如果你知道如何做这样的事情,请分享。好的。我认为如果你更新了你的问题,用那些if-else-if来展示你现有的代码样本,那会很有帮助。。。语句,以及“function name”变量的设置方式(因为这决定了调用哪个方法,对吗?)。我没有包括那些if-else-if的原因是它们本身非常琐碎-只是
[else]if(todo.equals(“SomeName”))functionSomeName(params)
一遍又一遍。至于函数名是如何设置的——不幸的是,这来自于一个API调用。以太网电缆另一端的客户机运行webmethod,比如说
runFunction(“F01”)
,然后调用functionF01。如果这发生在程序内部,那么多态性可能会解决它。