在我的项目,我已经定义了类似如下的注解:
(省略@Retention
,@Target
为了简洁)Java注释重载?
public @interface DecaysTo {
String[] value();
}
由于最初写它,我们的需求已经改变,现在我已经定义了一个枚举我希望能够到位的字符串使用方法:
public enum Particle {
ELECTRON,
ANTIELECTRON,
NEUTRINO,
ANTINEUTRINO,
...
}
为了避免更新此注释的每个实例,我希望能够构建批注与或者 a String
或enum Particle
的成员必须更新此注释的每个实例以指定属性。但是,由于我们定义了注释的属性,而不是构造函数,所以它似乎不可能超载。
// In a perfect world, either of these would work ...
public @interface DecaysTo {
String[] value();
Particle[] value();
}
@DecaysTo({"Electron", ...})
@DecaysTo({Particle.ELECTRON, ...})
// without having to explicitly specify which attribute to set:
public @interface DecaysTo {
String[] stringVals();
Particle[] enumVals();
}
@DecaysTo(stringVals = {"Electron", ...})
@DecaysTo(enumVals = {Particle.ELECTRON, ...})
还企图:
public @interface DecaysTo {
Object[] value();
}
有可以做到这一点并不需要通过回去和编辑的代码的大量任何方式?
那个转换方法是什么样的?你的意思是自己制作一个动态代理,还是其他的东西? – Yishai 2010-09-03 14:25:59