自定義注解


問題

如何通過注解值得到對應成員變量?

學習注解

自定義注解

@Inherited
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Index {
    String name() default "";
}

定義User類

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class User {
    @Index(name = "userNo")
    private int userId;
    @Index(name = "Name")
    private String userName;
}

其中lombok的依賴配置為

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
</dependency>  

測試注解

public class UserTest {
    private void test1() {
        Class<User> clazz = User.class;
        Field[] fields = clazz.getDeclaredFields();
        List<Field> result = new ArrayList<>();
        for (Field field : fields){
            if(field.getAnnotation(Index.class)!=null) {
                result.add(field);
            }
        }

        for(Field list:result){
            System.out.println("被注解的字段為:" + list.getName());
        }
    }

    private void test2() {
        Class<User> clazz = User.class;
        Field[] fields = clazz.getDeclaredFields();
        List<String> result = new ArrayList<>();
        for (Field field : fields){
            if(field.getAnnotation(Index.class)!=null) {
                result.add(field.getAnnotation(Index.class).name());
            }
        }

        for(String list:result){
            System.out.println("注解的字段為:" + list);
        }
    }

    public static void main(String[] args) {
        UserTest userTest = new UserTest();
        userTest.test1();
        userTest.test2();
    }
}

結果

被注解的字段為:userId
被注解的字段為:userName
注解的字段為:userNo
注解的字段為:Name

解決

private void test3() {
        Map<String, String> annotation2Field = new HashMap<>();
        Class<User> clazz = User.class;
        
        
        
        Field[] fields = clazz.getDeclaredFields();
        List<String> result = new ArrayList<>();
        for (Field field : fields){
            if(field.getAnnotation(Index.class)!=null) {
                result.add(field.getAnnotation(Index.class).name());
                annotation2Field.put(field.getAnnotation(Index.class).name(), field.getName());
            }
        }
        annotation2Field.forEach((k, v)-> System.out.println(k + ":" + v));

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM