反射小結(二)之 java.lang.reflect.Type
阿新 • • 發佈:2019-02-15
1. 利用反射獲取型別
一圖二圖
2. 測試
結果:package com.jdbc.dason; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import org.junit.Test; public class reflectionTest { @Test public void testReflect() { Student s = new Student(); Class clazz = s.getClass(); System.out.println(clazz); // getSuperclass()獲得該類的父類 Class superClass = clazz.getSuperclass(); System.out.println(superClass); /** * 1) Type 是java 程式語言中的所有型別的父介面。這些包括原始型別、引數化型別、陣列型別、型別變數。 * 2) Class 是 Type 的唯一實現類 * Class.getGenericSuperclass():返回代表當前實體(類、介面、簡單型別或void)的父類的型別(獲得帶有泛型的父類) * 3) parameterizedtype 是Type的 子介面,代表一個引數化的型別 * ParameterizedType.getActualTypeArguments():返回該型別的 實際型別引數的 型別 的陣列 */ Type type = clazz.getGenericSuperclass(); System.out.println(type); // parameterizedtype 是Type的 子介面,代表一個引數化的型別 ParameterizedType p = (ParameterizedType) type; // getActualTypeArguments():返回表示該型別的 實際型別引數的 型別 的陣列 Class c = (Class) p.getActualTypeArguments()[0]; System.out.println(c); } }
class com.jdbc.dason.Student
class com.jdbc.dason.Person
com.jdbc.dason.Person<com.jdbc.dason.Student>
class com.jdbc.dason.Student