父類如何獲取子類傳遞的泛型
阿新 • • 發佈:2017-06-10
str 父類 image 轉載 class argument pretty edge pub
權聲明:本文為博主原創文章,未經博主允許不得轉載。
package com.reflect.other;
import java.io.Serializable;
/**
* 簡單pojo類(測試用,無具體意義)
*
* @author edgewalk
* @date 2017年6月5日
*/
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
package com.reflect.other;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
/**
* 父類
*
* @author edgewalk
* @date 2017年6月5日
* @param <T>泛型,可以由之類繼承傳遞
*/
public class Parent<T> {
/**
* 用於接收傳遞的clazz
*/
private Class clazz;
// 獲取子類傳遞給他的具體泛型類型
public Parent() {
// 1獲取子類的class(在創建子類對象的時候,會返回父類的構造方法)
Class<? extends Parent> clazz = this.getClass(); // Student
// 2獲取當前類的帶有泛型的父類類型
ParameterizedType type = (ParameterizedType) clazz.getGenericSuperclass();
// 3返回實際參數類型(泛型可以寫多個)
Type[] types = type.getActualTypeArguments();
// 4 獲取第一個參數(泛型的具體類) Person.class
clazz = (Class) types[0];
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
package com.reflect.other;
/**
* 子類
* @author edgewalk
* @date 2017年6月5日
*/
public class Student extends Parent<Person> {
/**
* 當我們創建本類對象的時候,會先創建一個student類的空參構造,
* 然後會返回父類的空參構造(Parent),此時父類就會獲取到子類傳遞給他的泛型,在父類中執行相關操作
*/
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
父類如何獲取子類傳遞的泛型