在ClassDef
中是否有像IntDef
的{{1}}这样的annotation
来限制annotation
的类型?
@ClassDef({
Integer, String, Long
})
public @interface MyRestrictedData {
}
因此,我可以将其用作:public void showData(@MyRestrictedData Object myData)
答案 0 :(得分:1)
此要求不能由注释处理器解决。
它只能由运行时容器(例如Spring)来完成。
但是实际上,容器只是帮助您通过代理检查它。你为什么不能自己做?像这样:
public class MyRestrictedData {
public static void check(Object o){
if(!(String.class.isInstance(o) || Integer.class.isInstance(o) || Long.class.isInstance(o)))
throw new IllegalArgumentException("Must be String, Integer or Long.");
}
}
public void showData(Object myData) {
MyRestrictedData.check(myData);
// then do your work
}
如果您真的想在编译期间检查,唯一的方法就是zhh所说的,请覆盖您的方法。我不知道什么逻辑需要一起处理String
,Integer
和Long
。但是,如果您确实需要,可以执行以下操作:
public void showData(String s){
showData((Object)s);
}
public void showData(Integer i){
showData((Object)i);
}
public void showData(Long l){
showData((Object)l).
}
private void showData(Object o){
// do your work here, note this method is PRIVATE
}