Java注释重载?
发布时间:2020-12-15 08:35:15 所属栏目:Java 来源:网络整理
导读:在我的项目中,我已经定义了类似于以下内容的注释: (省略@Retention,@ Target为了简洁) public @interface DecaysTo { String[] value();} 自从最初编写它以来,我们的需求已经改变,我现在已经定义了一个我希望能够用来代替字符串的枚举: public enum Partic
在我的项目中,我已经定义了类似于以下内容的注释:
(省略@Retention,@ Target为了简洁) public @interface DecaysTo { String[] value(); } 自从最初编写它以来,我们的需求已经改变,我现在已经定义了一个我希望能够用来代替字符串的枚举: public enum Particle { ELECTRON,ANTIELECTRON,NEUTRINO,ANTINEUTRINO,... } 为了避免更新此批注的每个实例,我希望能够使用String或枚举粒子的成员构造批注,而无需更新此批注的每个实例以指定属性.但是,由于我们定义了注释的属性,而不是构造函数,因此似乎不可能重载它. // 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(); } 有没有办法做到这一点,不涉及返回和编辑大量的代码? 解决方法
最好的方法是查找并替换以前的所有注释.你不希望旧的设计挥之不去.在整个重构过程中保持干净的代码库.
假设您不想这样做,或者您不拥有使用注释的代码,则应保留两种注释类型.在您的注释处理代码中,您查找两者,如果使用旧的,则将其转换为新的. DecaysToV2 anno = getAnnotation( DecaysToV2.class ); if(anno = null) { DecaysTo anno_old = getAnnotation( DecaysTo.class ); if(anno_old!=null) anno = convert (anno_old); } DecaysToV2只是一个你可以提出的接口: DecaysToV2 convert( DecaysTo old ) { DecaysToV2Impl impl = new DecaysToV2Impl(); impl.value = ... return impl; } static class DecaysToV2Impl implements DecaysToV2 { Particle[] value; public Particle[] value(){ return this.value; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |