【发布时间】:2014-09-04 10:10:31
【问题描述】:
我想写代码,如下所示。
MyClass a = new @MyAnnotation MyClass()
假设 MyClass 方法如下所示
public class MyClass {
int a;
public void setValue(int a) {
this.a = a;
}
}
所以当有人使用注解创建 MyClass 对象时,它应该将默认值设置为某个 x(比如 20)。
在检查器框架中,它允许我们在代码中注释如下。
MyClass a = new @MyAnnotation MyClass()
有谁知道我们如何在编译时将其分成两部分,如下所示?
MyClass a = new MyClass();
a.setValue(20);
或者如果我们能够像下面这样传递默认值也可以。
MyClass a = new @MyAnnotation(value=20) MyClass()
这可以使用注释处理器来实现吗/需要使用像 ASM 这样的字节码处理器来完成它吗? 以更有意义的方式更新。
【问题讨论】:
-
为什么不创建一个构造函数?你的
setValue(a)也返回Test的类型,但在正文中,你返回了this? -
改成MyClass,打错字了。
-
没有意义,它是一个实例方法,并且返回相同的实例...
-
忽略方法返回。我的意图是在创建对象时有注释时为成员设置默认值。我尝试使用上述语法运行一些代码,但没有成功。
-
请详细说明“但没用”。您知道类型注释功能需要 Java 8 吗?
标签: java annotations java-8 java-bytecode-asm checker-framework