2 回答

TA貢獻1982條經驗 獲得超2個贊
您可以通過使用函數來查看推斷的泛型類型getGenericSuperclass,然后再看getActualTypeArguments一個示例:
// 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]
您將獲得一個Set<Class<? extends ClassBase<Long>>>包含擴展類的ClassBase<Long>。Set<Class<ClassBase<Long>>>您所要求的A ,從技術上講應該只擁有該類ClassBase本身,而您實際上對子類卻很感興趣,因此您可以得到Class<? extends ClassBase<Long>>。

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