第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用反射的通用類類型父級

使用反射的通用類類型父級

HUX布斯 2021-11-17 17:21:52
public class Parent {}public class A extends Parent {}public class B {}public class Test {    private List<A> aList;    private List<B> bList;}我在玩反射和泛型并創(chuàng)建這些類只是為了好玩?,F(xiàn)在我想打印Test類中類型為 的變量名稱List<T extends Parent>。所以我想打印只是"aList"因為Aextends Parent,而 whileB沒有。到目前為止,我已經(jīng)能夠獲得List變量。我查看了各種反射方法,但無法提取 List 的類型<...>并查看其超類是否Parent存在。這是我的代碼,目前同時打印"aList"和"bList":-public static void main(String[] args) {    Arrays.stream(Test.class.getDeclaredFields())            .filter(field -> field.getType().equals(List.class)) // && fieldActualTypeExtendsA            .forEach(field -> System.out.println(field.getName()));}我應(yīng)該在過濾器中添加什么?
查看完整描述

1 回答

?
嗶嗶one

TA貢獻(xiàn)1854條經(jīng)驗 獲得超8個贊

您可以訪問字段泛型類型,通過field.getGenericType()它返回ParameterizedType類的實現(xiàn),其中方法getActualTypeArguments()返回類型參數(shù)。這是可用的List,Map等


然后您的父級過濾代碼可能如下所示:


Arrays.stream(Test.class.getDeclaredFields())

        .filter(field -> field.getType().equals(List.class)

                && field.getGenericType() instanceof ParameterizedType

                && ((Class) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]).getSuperclass().equals(Parent.class))

        .forEach(field -> System.out.println(field.getName()));

您當(dāng)然可以添加一些安全檢查 - 例如返回的數(shù)組是否getActualTypeArguments()為空。


查看完整回答
反對 回復(fù) 2021-11-17
  • 1 回答
  • 0 關(guān)注
  • 139 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號