在我的項目,我已經定義了類似如下的註解:
(省略@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