獲取泛型T的ClassT clazz

在我們搭建框架中往往會用到泛型,我們知道泛型的好處是編譯的時候檢查類型安全,并且所有的強制轉換都是自動和隱式的,代碼的重用率高?

然而有時候<method>的入參并不能直接強制轉換成泛型的類型,比如說下面這段代碼:?
這里寫圖片描述?
很明顯String?類型不能強制轉換成<T>?
那我們會需要用到FastJson或者GSON這種類型轉換工具進行類型的轉換工作?
但FastJson和Gson 內方法是這樣的:

public static <T> T parseObject(String text, Class<T> clazz) {return parseObject(text, clazz, new Feature[0]);}
  • 1
  • 2
  • 3

Class<T> clazz?是顯式的類型。 直接使用的話會報錯:?
這里寫圖片描述?
不能直接使用<T>,那么我們需要獲取到<T>Class<T> clazz;?
下面是獲取泛型<T>Class<T> clazz兩種方法:

  • 一種是使用反射類reflect
   Class<? super T> rawType;rawType = (Class <T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
  • 1
  • 2

getActualTypeArguments()[0]中 ‘0’ 代表的是第一個泛型類型。

  • 第二種采用Gson來獲取
Class<? super T> rawType;public BaseCallback() {this.mType = getSuperclassTypeParameter(getClass());this.rawType = (Class<? super T>) $Gson$Types.getRawType(mType);}static Type getSuperclassTypeParameter(Class<?> subclass) {Type superclass = subclass.getGenericSuperclass();if (superclass instanceof Class) {throw new RuntimeException("Missing type parameter.");}ParameterizedType parameterized = (ParameterizedType) superclass;return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Class<? super T> rawType就是我們泛型<T>的數據類型Class<T> clazz?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451300.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451300.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451300.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

寫給大數據開發初學者的話5

見&#xff1a;http://lxw1234.com/archives/2017/01/832.htm 至此&#xff0c;你的大數據平臺底層架構已經成型了&#xff0c;其中包括了數據采集、數據存儲與計算&#xff08;離線和實時&#xff09;、數據同步、任務調度與監控這幾大模塊。接下來是時候考慮如何更好的對外提…

3.spring boot Controller獲取請求參數的值

2019獨角獸企業重金招聘Python工程師標準>>> 1.獲取連接中的參數,使用倒的關鍵詞PathVariable RestController public class HelloController {RequestMapping(value "/hello/{id}",method RequestMethod.GET)public String index(PathVariable("i…

斷開的管道 java.io.IOException: Broken pipe 解決方法

斷開的管道 java.io.IOException: Broken pipe 解決方法一、Broken pipe產生原因分析1.當訪問某個服務突然服務器掛了&#xff0c;就會產生Broken pipe;2.客戶端讀取超時關閉了連接&#xff0c;這時服務器往客戶端再寫數據就發生了broken pipe異常&#xff01;二、方案1.問題一…

登錄與注冊

代碼如下 private void btn_login_Click(object sender, EventArgs e){SqlConnection sqlconnection new SqlConnection();sqlconnection.ConnectionString ConfigurationManager.ConnectionStrings["SQL"].ConnectionString;SqlCommand sqlcommand new SqlComman…

四大電商對壘價格戰:家電高庫存或是推手

摘要&#xff1a;[京東、蘇寧、國美、天貓等電商在家電領域的價格戰&#xff0c;更多是定價方家電廠商的倒逼]  “五一”期間&#xff0c;電商企業發起的價格戰硝煙仍未消散&#xff0c;如今戰火又起。一種較為普遍的看法是&#xff0c;此次價格戰&#xff0c;正是各家電商企…

三分鐘明白 Activiti工作流 -- java運用

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、 什么是工作流 以請假為例&#xff0c;現在大多數公司的請假流程是這樣的 員工打電話&#xff08;或網聊&#xff09;向上級提出請…

linux命令 ps -ef 的含義

PS是LINUX下最常用的也是非常強大的進程查看命令//以下這條命令是檢查java 進程是否存在. ps -ef |grep java下面對命令選項進行說明&#xff1a;-e 顯示所有進程。-f 全格式。ps -e 列出程序時&#xff0c;顯示每個程序所使用的環境變量。ps -f 用ASCII字符顯示 樹狀結構 &…

vue-i18n使用及踩坑記錄

使用步驟 1. 安裝 npm i vue-i18n 2. vue-cli下使用 //1. 引入 vue-i18n import Vue from vue import VueI18n from vue-i18n Vue.use(VueI18n)//2. 定義messages const messages {en: {text: {hello: hello world}},zh: {text: {hello: 你好、世界}} }//如果messages字段很多…

idea搭建web項目及tomcat部署總結

該文章為引用文章&#xff0c;原地址為&#xff1a;https://www.cnblogs.com/shindo/p/7272646.html 后面有我自己搭建過程中遇到的問題及解決方案&#xff0c;請參考。 一、創建簡單web項目 1、創建一個web project File -> new Project ->選擇project sdk 為1.6&#x…

Activiti工作流框架學習(一)環境的搭建和數據表的了解

一、什么是工作流 工作流(Workflow)&#xff0c;就是“業務過程的部分或整體在計算機應用環境下的自動化”&#xff0c;它主要解決的是“使在多個參與者之間按照某種預定義的規則傳遞文檔、信息或任務的過程自動進行&#xff0c;從而實現某個預期的業務目標&#xff0c;或者促使…

中國消費者為何不愿為App付費?

Facebook收購Instagram之后&#xff0c;國內的開發者們唏噓不已。Instagram的用戶不過3000萬&#xff0c;卻能賣出10億美元的價格。如果Instagram在國內的話&#xff0c;就算沒被關閉也會被抄襲。如果通過收費來賺錢的話&#xff0c;也會因為黑卡變得顆粒無收&#xff0c;最終很…

什么是交換分區

SWAP就是LINUX下的虛擬內存 分區,它的作用是在 物理內存 使用完之后,將磁盤空間(也就是SWAP分區)虛擬成內存來使用.它和Windows系統的交換文件作用類似&#xff0c;但是它是一段連續的磁盤空間&#xff0c;并且對用戶不可見。

基礎、語法都不是最重要的,學Python最重要的是什么?編程思路!

論述 一些朋友自學python過程中&#xff0c;發現書也能看懂&#xff0c;書上的玩具代碼也能看懂&#xff0c;但為啥自己不能做習題&#xff0c;不能寫代碼解決問題&#xff0c;自己不能動手寫代碼&#xff1f; 原因 初學者沒有學會計算思維、解決問題的方法、編程思路。編程思路…

Windows下啟動,關閉Nginx命令

啟動 直接點擊Nginx目錄下的nginx.exe 或者 cmd運行start nginx 關閉 nginx -s stop 或者 nginx -s quit stop表示立即停止nginx,不保存相關信息 quit表示正常退出nginx,并保存相關信息 重啟(因為改變了配置,需要重啟) nginx -s reload 轉載于:https://www.cnblogs…

什么是守護進程?

守護進程是在后臺運行不受終端控制的進程&#xff08;如輸入、輸出等&#xff09;&#xff0c;一般的網絡服務都是以守護進程的方式運行。守護進程脫離終端的主要原因有兩點&#xff1a;&#xff08;1&#xff09;用來啟動守護進程的終端在啟動守護進程之后&#xff0c;需要執行…

Activiti工作流引擎的使用

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Activiti工作流引擎使用 1.簡單介工作流引擎與Activiti 對于工作流引擎的解釋請參考百度百科&#xff1a;工作流引擎 1.1 我與工作流引…

Flurry調查報告:圖片和視頻應用增長速度最快

據外國媒體報道&#xff0c;移動數據分析公司Flurry近期對應用分類的歡迎度進行研究后發現&#xff0c;就用戶使用的時間而言&#xff0c;“圖片和視頻”應用已成為增長最快的移動應用。 Flurry對各種應用分類的800多萬移動用戶進行了調查&#xff0c;并利用其分析工具跟蹤了1…

JS內存管理與垃圾回收

javascript的內存管理Javascript 是那些被稱作垃圾回收語言當中的一員。垃圾回收語言通過周期性地檢查那些之前被分配出去的內存是否可以從應用的其他部分訪問來幫助開發者管理內存。換句話說&#xff0c;當計算機發現有的內存已經不能被訪問到了&#xff0c;就會把它們標記為垃…

牛客網分糖果

題解&#xff1a; 考試的時候沒有想出來。。。 剛開始想了個比較錯誤的dp 后來想到了容斥。。 但是沒有想到怎么去維護這個東西。。 按照一般的套路 至少有一個相鄰相等的-至少有兩個相鄰相等的 但是這道題里這樣并不好維護 我們考慮用dp來算這個東西 f[i]f[j]*min(a[j].....a[…

HTTP 503 錯誤 – 服務不可用 (Service unavailable)

介紹因暫時超載或臨時維護&#xff0c;您的 Web 服務器目前無法處理 HTTP 請求。 其含義是&#xff0c; 這是一個暫時情況&#xff0c;會有一些延誤&#xff0c; 過 后將會得到緩解。 有些服務器在這種情況下也許干脆拒絕套接字&#xff08;socket&#xff09; 連接&#xff0c…