1. 程式人生 > >Java反射之getGenericSuperclass()用法

Java反射之getGenericSuperclass()用法

gets 獲得 target nor com ria 反射 log weight

父類

package com.itheima.mytest;

public class Person<T1, T2> {

}

子類

package com.itheima.mytest;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class Student extends Person<Integer, String> {

@SuppressWarnings("rawtypes")
public static void main(String[] args)
{
Student student = new Student();
// getClass() 獲得該類的類類型(即類型變量)
Class clazz = student.getClass();
// getSuperclass() 獲得該類的父類
System.out.println(clazz.getSuperclass());

// getGenericSuperclass() 獲得該類帶有泛型的父類
Type type = clazz.getGenericSuperclass();
System.out.println(type);
// Type是 Java 編程語言中所有類型的公共高級接口。它們包括原始類型、參數化類型、數組類型、類型變量和基本類型。

// ParameterizedType 參數化類型,即泛型
// 將Type轉化為參數化類型(即泛型)
ParameterizedType p = (ParameterizedType) type;

// getActualTypeArguments() 獲取參數化類型的數組,泛型可能有多個
Type[] actualTypeArguments = p.getActualTypeArguments();

// 將Type轉化為類型變量(即Class)
Class c1 = (Class) actualTypeArguments[0];
Class c2 = (Class) actualTypeArguments[1];
System.out.println(c1);
System.out.println(c2);
}
}

運行結果

class com.itheima.mytest.Person
com.itheima.mytest.Person<java.lang.Integer, java.lang.String>
class java.lang.Integer
class java.lang.String

參考鏈接:
  https://blog.csdn.net/qq_26424655/article/details/71515741

Java反射之getGenericSuperclass()用法