1. 程式人生 > >反射小結(二)之 java.lang.reflect.Type

反射小結(二)之 java.lang.reflect.Type

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