package com.example.net;
import androidx.lifecycle.Observer;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class TestType {
/**
* 獲取泛型的實際類型
*
* @param object 如 Result<T>
* @return Type
*/
public static Type getType(Object object) {
Type type = null;
try {
Type[] interfaceTypes = object.getClass().getGenericInterfaces();
if (interfaceTypes.length == 0) {
//非接口
type = object.getClass().getGenericSuperclass();
} else {
//接口
type = interfaceTypes[0];
}
if (type != null) {
if (ParameterizedType.class.isAssignableFrom(type.getClass())) {
type = (((ParameterizedType) type).getActualTypeArguments())[0];
}
}
} catch (Exception e) {
e.printStackTrace();
}
return type;
}
public static void main(String[] args) {
NetRequest netRequest = new NetRequest();
netRequest.observer = new Observer<NetResult<List<NetWeather>>>() {
@Override
public void onChanged(NetResult<List<NetWeather>> netResult) {
}
};
netRequest.netCallback = new NetCallback<NetResult<List<NetWeather>>>() {
@Override
public void callback(NetResult<List<NetWeather>> netResult) {
}
};
NetCallback2 netCallback2 = new NetCallback2() {
@Override
public void callback() {
}
};
List<List<String>> list1 = new ArrayList<List<String>>();
List<List<String>> list2 = new ArrayList<List<String>>() {
};
System.out.println("getType : " + getType(list1));
System.out.println("getType : " + getType(list2));
System.out.println("getType : " + getType(netRequest.observer));
System.out.println("getType : " + getType(netRequest));
System.out.println("getType : " + getType(netCallback2));
System.out.println("getType : " + String.class.getCanonicalName());
System.out.println("getType : " + getType(new Object()));
}
}
getType : E
getType : java.util.List<java.lang.String>
getType : com.example.net.NetResult<java.util.List<com.example.net.NetWeather>>
getType : class java.lang.Object
getType : interface com.example.net.NetCallback2
getType : java.lang.String
getType : null
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。