gpt4 book ai didi

java - 限制注释的类类型

转载 作者:行者123 更新时间:2023-12-02 10:58:01 25 4
gpt4 key购买 nike

annotation 中是否有类似 IntDefClassDef 来限制 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所说的,重写你的方法。我不知道什么逻辑需要一起处理 StringIntegerLong 。但如果你确实需要,你可以这样做:

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
}

关于java - 限制注释的类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51568312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com