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(); } } }