獲取泛型型別工具類
2.1. 整合介面帶有泛型
請使用 genericparadigmutil.parseinte***cegenericparadigm(…)。
提供的 api:
object: 想獲取那個物件的介面中泛型型別2.2. 整合不是介面中的泛型clazz: 即 object.getclass()
who:因為乙個類可以整合多個介面, who 即你想獲取那個介面中的泛型
position: 乙個介面中可能有多個泛型, 比如 map 就有兩個, 則 position 就是指定你想要其中的哪乙個
pathfinders: 指路人(即手動指定查詢特殊路徑)
請使用 genericparadigmutil.parsegenericparadigm(…)
提供的 api:
object: 想獲取那個物件的介面中泛型型別2.3. 使用情況及細節介紹clazz: 即 object.getclass()
pathfinders: 指路人(即手動指定查詢特殊路徑)
genericparadigmutil.
parseinte***cegenericparadigm
(a,0,0
) or
genericparadigmutil.
parsegenericparadigm
(a,0
)
如果想獲取 z 的型別
genericparadigmutil.
parseinte***cegenericparadigm
(a,0,1
) or
genericparadigmutil.
parsegenericparadigm
(a,1
)
// 返回的型別為 integer 的型別, 因為都是取得都是位置 0 的泛型型別並且是最最深處的那個泛型
genericparadigmutil.
parseinte***cegenericparadigm
(a,0,0
) or
genericparadigmutil.
parsegenericparadigm
(a,0
)// 獲取 t 的型別就跟情況一一樣了
genericparadigmutil.
parseinte***cegenericparadigm
(a,0,1
) or
genericparadigmutil.
parsegenericparadigm
(a,1
)
如果想獲取 b 中最近的泛型怎麼辦?
請記住不指定 指路人, 則工具類只會一股腦的找到最深處, 如果想獲取巢狀中間的某乙個型別怎麼辦? 答案就需要手動指定指路人!
請先記住泛型<>就代表乙個層級, 那麼上面的層級怎麼劃分呢? 很簡單:從0開始, 其中< baseresponse > 層級為0, < list > 層級為1, < map > 層級為2, 層級為3。 結束!!!
指路人結構很簡單
public
static
class
pathfinder
public
pathfinder
(int in_depth,
int in_position)
}
其中 depth 就是指定的層級, position 為獲取該層級的第幾個泛型型別, 比如 map 層級的就有兩個泛型型別。
注意:如果需要手動指定指路人, 則從第 0 層要一直指定到你想要層級的泛型, 指路人不能缺失和跳躍。 原因很簡單, 比如map>, map>, 如果你缺失了其中乙個指路人, 就無法獲取到下乙個路口咋走了!
已情況二為例
// class a (extend | implements) b>>, t>
list
pathfinders =
newarraylist
(); pathfinders.
add(
newgenericparadigmutil.pathfinder(0
,0))
;// --> baseresponse
pathfinders.
add(
newgenericparadigmutil.pathfinder(1
,0))
;// --> list
pathfinders.
add(
newgenericparadigmutil.pathfinder(2
,0))
;// --> map
pathfinders.
add(
newgenericparadigmutil.pathfinder(3
,0))
;// --> integer
pathfinders.
add(
newgenericparadigmutil.pathfinder(3
,1))
;// --> userinfo
// eg:想獲取 b 的泛型是什麼型別
list
pathfinders =
newarraylist
(); pathfinders.
add(
newgenericparadigmutil.pathfinder(0
,0))
;// --> baseresponse
class clazz
= genericparadigmutil.
parseinte***cegenericparadigm
(a,0
, pathfinders)
or class clazz
= genericparadigmutil.
parsegenericparadigm
(a, pathfinders)
// eg: 再比如想獲取 位於 userinfo 那個是什麼型別
list
pathfinders =
newarraylist
(); pathfinders.
add(
newgenericparadigmutil.pathfinder(0
,0))
;// --> baseresponse
pathfinders.
add(
newgenericparadigmutil.pathfinder(1
,0))
;// --> list
pathfinders.
add(
newgenericparadigmutil.pathfinder(2
,0))
;// --> map
pathfinders.
add(
newgenericparadigmutil.pathfinder(3
,1))
;// --> userinfo
class clazz
= genericparadigmutil.
parseinte***cegenericparadigm
(a,0
, pathfinders)
or class clazz
= genericparadigmutil.
parsegenericparadigm
(a, pathfinders)
java獲取泛型的實際型別
這是乙個困擾了我好久的問題,在我寫的android請求框架總結 二 中寫到過利用框架自動解析json資料,如下 object o if result.charat 0 else listener.success o 返回的物件也只能是object型別,具體用的時候還需要做一下強轉 其實當時有想過用泛...
Java 泛型 獲取 ClassName
public class commondaoimplimplements commondao的情況下 倘若希望獲得t 泛型 的classname 可參照 springside class clazz this.getclass type gentype clazz.getgenericsupercl...
獲取泛型實際型別
public class tutil catch instantiationexception e catch illegalacces ception e catch classcastexception e return null public static class forname stri...