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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

獲取所有擴(kuò)展類以推斷某些泛型的類

獲取所有擴(kuò)展類以推斷某些泛型的類

幕布斯6054654 2021-03-30 13:14:49
我正在尋找一種方法來獲取擴(kuò)展某個(gè)類并推斷某些泛型的所有類。我知道使用Reflectionsi可以獲取擴(kuò)展一個(gè)類的所有類final Reflections reflections = new Reflections("path.to.package");Set<Class<? extends ClassBase>> classes = reflections.getSubTypesOf(ClassBase.class);但是我不確定如何只使用某些泛型。這是我想要實(shí)現(xiàn)的示例假設(shè)我有 ClassBase<T>public class ClassBase<T> {}然后我有了ClassA ClassB ClassC,他們都在延伸ClassBasepublic class ClassA extends ClassBase<Long> {}public class ClassB extends ClassBase<Long> {}public class ClassC extends ClassBase<Integer> {}我怎么只得到ClassA和ClassB?我什至可以接受所有擴(kuò)展的類,ClassBase然后過濾掉我不需要的那些類,只要我最終得到的集合中只包含那些擴(kuò)展ClassBase并推斷<Long>為泛型類型的類即可?;蛘吒玫氖?,我實(shí)際上想要的Set<Class<ClassBase<Long>>>不僅僅是一個(gè)Set<Class<ClassBase>>只包含那些推斷Long為通用的
查看完整描述

2 回答

?
臨摹微笑

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊

您可以通過使用函數(shù)來查看推斷的泛型類型getGenericSuperclass,然后再看getActualTypeArguments一個(gè)示例:


// Given that all classes in this set are actually subclasses of ClassBase

Set<Class<? extends ClassBase>> classes = Set.of(ClassA.class, ClassB.class, ClassC.class);

System.out.println(classes); // [class test.ClassB, class test.ClassA, class test.ClassC]


@SuppressWarnings("unchecked")

Set<Class<? extends ClassBase<Long>>> result = classes.stream()

    .filter(cls -> {

        // Get superclass, which is ClassBase, so assume it's also parameterized

        ParameterizedType superClass = (ParameterizedType) cls.getGenericSuperclass();

        Type inferred = superClass.getActualTypeArguments()[0]; // get first type argument

        return inferred == Long.class; // check if it's 'Long'

    })

    // Can now say they all extend ClassBase<Long>

    .map(cls -> (Class<? extends ClassBase<Long>>) cls)

    .collect(Collectors.toSet());


System.out.println(result); // [class test.ClassA, class test.ClassB]

您將獲得一個(gè)Set<Class<? extends ClassBase<Long>>>包含擴(kuò)展類的ClassBase<Long>。Set<Class<ClassBase<Long>>>您所要求的A ,從技術(shù)上講應(yīng)該只擁有該類ClassBase本身,而您實(shí)際上對(duì)子類卻很感興趣,因此您可以得到Class<? extends ClassBase<Long>>。


查看完整回答
反對(duì) 回復(fù) 2021-04-21
?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊

對(duì)于使用的彈簧人,并將這些類由容器管理(它們標(biāo)注有一些春天注解喜歡@Service,@Component),你可以得到所有用以下方法的類:

@Inject Set <ClassBase <Long>> extensionsWithLongType;


查看完整回答
反對(duì) 回復(fù) 2021-04-21
  • 2 回答
  • 0 關(guān)注
  • 188 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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