zoukankan      html  css  js  c++  java
  • Java注解小试

    Java通过注解方式指明url中必须包括键值:

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    import java.lang.reflect.Field;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;
    
    public class AnnotationTest {
        @Target(ElementType.FIELD)
        @Retention(RetentionPolicy.RUNTIME)
        public @interface CbdLinkAnnotation {
            enum TYPE {OPTIONAL, REQUIRED}
    
            TYPE value() default TYPE.OPTIONAL;
        }
    
        public static class A {
            @CbdLinkAnnotation(value = CbdLinkAnnotation.TYPE.OPTIONAL)
            public static final String KEY1 = "key1";
            @CbdLinkAnnotation(value = CbdLinkAnnotation.TYPE.REQUIRED)
            public static final String KEY2 = "key2";
    
            public Map<String, String> map = new HashMap<>();
    
            public A(String url) {
                //TODO: convert String to Map<String, String>
            }
        }
    
        public static void main(String[] args) {
            Set<String> set = new HashSet<>();
            Field[] fields = A.class.getFields();
            for (Field field : fields) {
                CbdLinkAnnotation[] annotations = field.getAnnotationsByType(CbdLinkAnnotation.class);
                if (annotations != null) {
                    for (CbdLinkAnnotation annotation : annotations) {
                        if (annotation.value() == CbdLinkAnnotation.TYPE.REQUIRED) {
                            set.add(field.getName());
                        }
                    }
                }
            }
    
            A a = new A("your_custom_string?key1=value1&key2=value2");
            for (String s : set) {
                if (!a.map.containsKey(s)) {
                    throw new RuntimeException("key " + s + " is required.");
                }
            }
        }
    }

    运行测试(默认KEY2为空,于是抛异常):

  • 相关阅读:
    hdu 6836
    2019 树形—DP
    2020牛客暑期多校训练营(第六场)
    hdu 6756 Finding a MEX 线段树
    2020 Multi-University Training Contest 2
    spring boot maven 打jar包 不能引入外部jar
    git 操作命令
    homestead 安装swoole
    MYSQL-触发器
    再次认知const
  • 原文地址:https://www.cnblogs.com/areful/p/11417376.html
Copyright © 2011-2022 走看看