java - 限制注释的类类型
问题描述
有没有ClassDef
像我下面IntDef
的例子那样annotation
限制类型annotation
?
@ClassDef({
Integer, String, Long
})
public @interface MyRestrictedData {
}
因此,我可以将其用作:public void showData(@MyRestrictedData Object myData)
解决方案
注释处理器无法解决此要求。
它只能通过运行时容器来完成,比如 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
}
推荐阅读
- regex - 从 Bigquery 中的 URL 中提取字符串
- c# - 角色有时不跳 - Unity
- python - 如何将文本文件排序到由元组组成的列表中,然后在 python 中附加到列表中
- c# - 在不使用对话框的情况下将数据从技能机器人传递到根机器人
- java - Spring Boot Swagger 使用继承时重复模型类型
- java - org.openqa.selenium.TimeoutException:超时:从渲染器接收消息超时:19.083
- jsf - 未显示全局面孔消息
- google-beacon-platform - 如何获得信标来计算附近的单个设备以每天进行访客监控?
- c# - 有没有最好的方法来实现线程之间的延迟?
- html - 如何滚动溢出的内容?