亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在怎么在Json中運用Java的反射與泛型

發布時間:2020-12-24 14:14:09 來源:億速云 閱讀:143 作者:Leah 欄目:開發技術

這篇文章給大家介紹在怎么在Json中運用Java的反射與泛型,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

java中的反射

首先新建一個基礎類Author。

package bean;
/**
 * 
 * @author Super~me
 * Description: 基礎類
 *
 */
public class Author {
	private static String TAG="Big";
	private String name;
	private int age;
	public Author(){}
	public Author(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	public String toString() {
		return "Author [name=" + name + ", age=" + age + "]";
	}
	private String pMethod(String t){
		String result=t+" Private Method";
		return result;
	}
	

}

然后新建一個反射類,運用反射方法對上面的類進行訪問.包括對私有方法的訪問,對私有屬性的訪問等。其中常用的一些方法以及解釋:

 在怎么在Json中運用Java的反射與泛型

//對象的創建
	public static void reflectNewInstance(){
		try {
			Class<?> authorclass=Class.forName(path_reflectfrom);
			Object object =authorclass.newInstance();
			Author author=(Author) object;
			author.setName("周大亨");
			author.setAge(89);
			System.out.println("author: "+author.toString());
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	//對私有的方法進行反射
	public static void reflectPrivateConstructor(){
		try {
			Class<?> authorclass =Class.forName(path_reflectfrom);
			Constructor<?> declaredConstructor =authorclass.getDeclaredConstructor(String.class,int.class);
			declaredConstructor.setAccessible(true);
			Object object=declaredConstructor.newInstance("lida",88);
			Author author=(Author) object;
			System.out.println( "Author: "+author.toString());
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	//反射私有的屬性
	public static void reflectPrivateField(){
		try {
			Class<?> authorclass =Class.forName(path_reflectfrom);
			Object authorobject=authorclass.newInstance();
			Field field=authorclass.getDeclaredField("TAG");
			field.setAccessible(true);
			String tag=(String)field.get(authorobject);
			System.out.println( "private field Tag:"+tag);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	//反射獲取私有的方法
	private static void reflectMethod(){
		try {
			Class<?> authorclass=Class.forName(path_reflectfrom);
			Object authorobject=authorclass.newInstance();
			Method authormethod=authorclass.getDeclaredMethod("pMethod", String.class);
			authormethod.setAccessible(true);
			String string=(String)authormethod.invoke(authorobject, TAG);
			System.out.println( "private Method: "+string);
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

通過控制臺打印以上信息:查看運用結果

ReflectClass.reflectNewInstance();
ReflectClass.reflectPrivateField();
ReflectClass.reflectPrivateConstructor();
ReflectClass.reflectMethod();

運行結果:

在怎么在Json中運用Java的反射與泛型

泛型的運用

對于泛型其實很好理解,通俗點講就是我們將類型也當成了參數進行傳值,這樣做代碼的安全性很大的被提升了,也為較大的優化帶來可能。泛型可以使編譯器知道一個對象的限定類型是什么,這樣編譯器就可以在一個高的程度上驗證這個類型消除了強制類型轉換 使得代碼可讀性好,減少了很多出錯的機會。但是也要記住泛型的規范,比如靜態的變量和方法不能引用泛型變量,我們也不能利用instanceof等方法對泛型的類型進行判斷,當然這樣做也毫無意義,重要的一點是泛型類不能繼承Exception或者Throwable。泛型的繼承中,不論子類是否為泛型類,所繼承和實現的父類接口都需要被指定。
常用的泛型類型變量:
E:元素(Element)
K:關鍵字(Key)
N:數字(Number)
T:類型(Type)
V:值(Value)
另外泛型界定的概念主要是指對泛型類型進行一個限定。比如:

public static <T extends String> T add(T str1, T str2) { return "";}

利用泛型和反射實現對json數據的保存

//利用反射獲取json數據到java類
  private static void getJson(){
  	try {
  		String json = "{\"name\":\"Miss王\",\"age\":79}";     
      JSONObject source=JSONObject.parseObject(json); 
      Class<?> aClass = Class.forName("bean.Author");
      Object obj = aClass.newInstance();
      Field[] declaredFields = aClass.getDeclaredFields();
      for (Field field : declaredFields) {
        field.setAccessible(true);
        System.out.println(source.getString(field.getName()));
        if (field.getGenericType().toString().equals(String.class.toString())) {
          field.set(obj, source.getString(field.getName()));
        } else if (field.getGenericType().toString().equals(int.class.toString())) {
          field.set(obj, source.getInteger(field.getName()));
        } 
      }
      Author author = (Author) obj;
      System.out.print(author);
    } catch (Exception e) {
      e.printStackTrace();
    }
 
  }

我們想把以上的實現封裝起來,這時就用了泛型。

 //泛型+反射實現json數據讀取到java類
  public static <T> T getJsonClass(String json, Class<T> beanclass) {
    try {
      JSONObject jsonObject = JSONObject.parseObject(json);
      Object obj = beanclass.newInstance();
      //拿到所以元素
      Field[] declaredFields = beanclass.getDeclaredFields();
      for (Field field : declaredFields) {
        field.setAccessible(true);
      	
        if (field.getGenericType().toString().equals(String.class.toString())) {
        	String value=jsonObject.getString(field.getName());
          if(value!=null){
           field.set(obj,value);
          System.out.println(value);
          }
        } else if (field.getGenericType().toString().equals(int.class.toString())) {
         	if(jsonObject.getInteger(field.getName())!=null)
           field.set(obj,jsonObject.getInteger(field.getName()));
           
        }
        
      }
      return (T) obj;
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }

調用實現:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		String json = "{\"name\":\"李先生\",\"age\":82}"; 
		//ReflectJson.getJson();
		//解析json然后換成實體類
		Author author=getJsonClass(json, Author.class);
		System.out.print( author.toString());
	}

運行結果:

在怎么在Json中運用Java的反射與泛型

在怎么在Json中運用Java的反射與泛型

關于在怎么在Json中運用Java的反射與泛型就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

仙桃市| 左贡县| 铜川市| 简阳市| 项城市| 象州县| 江口县| 上高县| 白水县| 邻水| 扶余县| 滨州市| 巴彦淖尔市| 肃宁县| 仁寿县| 勃利县| 安宁市| 准格尔旗| 荥经县| 大兴区| 东明县| 色达县| 白城市| 三台县| 山丹县| 颍上县| 缙云县| 横峰县| 沈丘县| 无棣县| 卢龙县| 湘西| 汪清县| 科技| 得荣县| 化州市| 盐源县| 湖北省| 萝北县| 景德镇市| 棋牌|