java反射和泛型测试

剑道第一仙 / 2023-08-16 / 原文

 java反射和泛型测试

package com.qsds.test;
import java.lang.reflect.Method;
import com.qr.util.GetFieldOrder;

/**
 * Hello world!
 *
 */
public class App<T> {
    
    public static void main(String[] args) throws Exception {
        //反射测试
        test sff = new test();
        sff.setUsername("aaaaaaaaaaaaaaaaaa");
        reflectTest(sff);
        
        //泛型反射测试
//        test sff = new test();
        sff.setUsername("aaaaaaaaaaaaaaaaaa");
        App<test> ap = new App<test>();
        ap.reflectTest2(sff);
    }

    //反射测试
    public static void reflectTest(test sff) throws Exception {
        System.out.println("-----------");
        Method[] ms = test.class.getMethods();
        System.out.println("-----------");
        for (Method m : ms) {
            GetFieldOrder gf = m.getAnnotation(GetFieldOrder.class);
            if (gf != null && gf.value() != 0) {
                String str = (String)m.invoke(sff);
                System.out.println("++++++++++"+gf.value()+str);
            }
        }
    }
    
    //泛型反射测试
    public  void reflectTest2(T t) throws Exception {
        System.out.println("-----------");
        Method[] ms = t.getClass().getMethods();
        System.out.println("-----------");
        for (Method m : ms) {
            GetFieldOrder gf = m.getAnnotation(GetFieldOrder.class);
            if (gf != null && gf.value() != 0) {
                String str = (String) m.invoke(t);
                System.out.println("++++++++++" + gf.value() + str);
            }
        }
    }
}

class test{
    private String username;
    private String password;

    public void setUsername(String username) {
        this.username = username;
    }

    @GetFieldOrder(1)
    public String getUsername() {
        return username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @GetFieldOrder(2)
    public String getPassword() {
        return password;
    }
}

 

package com.qr.util;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface GetFieldOrder {
    int value();
}