Java通過反射讀取泛型


1.在這里有必要先提一句關於javabean,建議有一個構造器,而不是必須要寫的,這是一個良好的習慣。

 這樣做肯定是有好處的,如果你的一個類寫了帶參的構造方法,而沒有寫空的構造方法,那么,如有有一個類繼承了你這個類,那么這個類必須重寫那個帶參的構造方法,不寫就會報錯,所以這就會帶來不必要的麻煩,所以我們一般都會寫一個空的構造方法,這是一個良好的習慣。

以下是我使用泛型中,使用到的一個javabean,附上源碼(其實沒啥用,就是怕看的時候不知道User哪里的)

package bean;

public class User {
    private int id;
    private int age;
    private String uname;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getUname() {
        return uname;
    }
    public void setUname(String uname) {
        this.uname = uname;
    }
    public User(int id, int age, String uname) {
        super();
        this.id = id;
        this.age = age;
        this.uname = uname;
    }
    
    //無參構造
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    
}

 

2.使用泛型來讀取泛型的信息,通過讀取方法的參數,讀取方法的返回值

 

package com.waibizi;

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;



import bean.User;

/**
 * 通過反射讀取泛型信息
 * @author 吳典秋
 *
 */

public class Get_generic_info {
    
    
    public void test01(Map<String,User> map,List<User> list){
        System.out.println("Demo04.test01()");
    }
    
    public Map<Integer,User> test02(){
        System.out.println("Demo04.test02()");
        return null;
    }

    @SuppressWarnings("all")   //壓制所有的警告
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        try {
            //獲得指定方法參數泛型信息
            Method m = Get_generic_info.class.getMethod("test01", Map.class,List.class);
            
            
            Type[] t = m.getGenericParameterTypes();
            for (Type paramType : t) {
                
                System.out.println("#"+paramType);
                
                if(paramType instanceof ParameterizedType){
                    
                    Type[] genericTypes = ((ParameterizedType) paramType).getActualTypeArguments();
                    
                    for (Type genericType : genericTypes) {
                        System.out.println("泛型類型:"+genericType);    
                    }
                    
                }
                
            }
            
            //獲得指定方法返回值泛型信息
            Method m2 = Get_generic_info.class.getMethod("test02", null);
            Type returnType = m2.getGenericReturnType();
            if(returnType instanceof ParameterizedType){
                    Type[] genericTypes = ((ParameterizedType) returnType).getActualTypeArguments();

                    for (Type genericType : genericTypes) {
                        System.out.println("返回值,泛型類型:"+genericType);
                    }
                    
            }
            
            
            
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        

    }

}


免責聲明!

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



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