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>>。

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
對(duì)于使用的彈簧人,并將這些類由容器管理(它們標(biāo)注有一些春天注解喜歡@Service
,@Component
),你可以得到所有用以下方法的類:
@Inject Set <ClassBase <Long>> extensionsWithLongType;
添加回答
舉報(bào)