【发布时间】:2018-07-16 08:54:35
【问题描述】:
Get minimize code to reproduce this
我有一个HelloWorldProcessor,他会简单地生成源文件HelloWorldMessage.java
public interface HelloWorldMessage {
String HELLO_WORLD = "Hello World";
}
现在我在我的代码中使用生成的值:
public class UseHelloWorld {
@Anno(HelloWorldMessage.HELLO_WORLD)
public void func(){
}
}
效果很好。
但是如果我将值声明为常量并间接使用它,会导致编译错误。
public class UseHelloWorld{
public static final String HW = HelloWorldMessage.HELLO_WORLD;
@Anno(UseHelloWorld.HW)
public void func(){
}
}
Javac 给出symbol not found 错误:
UseHelloWorld.java:2: error: cannot find symbol
public static final String HW = HelloWorldMessage.HELLO_WORLD;
^
symbol: variable HelloWorldMessage
location: class UseHelloWorld
UseHelloWorld.java:4: error: element value must be a constant expression
@Anno(UseHelloWorld.HW)
^
2 errors
我之所以说“javac”是因为它在 Eclipse 中使用 ECJ 和 m2e-apt 可以正常工作。
这是一个 javac 错误吗?如果不是,我怎样才能正确地间接使用生成的源?
【问题讨论】:
-
尝试通过class ref访问静态var:@Bean(ClassName.HELLO)
-
我想根据java版本和处理器类的位置,你应该指定一些javac参数来指示编译器这些在哪里。对于 Java 8:docs.oracle.com/javase/8/docs/technotes/tools/windows/…。 IDE 为您做了很多事情。毫不奇怪它可以直接使用它。
-
@Eugen 还是不行
-
@davidxxx 你知道shuold应该加哪个参数吗?
-
您使用的是什么版本的 java 和 spring?你能发布声明
public String bean(){和public static final String HELLO的类吗
标签: java annotations javac annotation-processing