有没有办法获取类中允许的子类实例的集合sealed
?
有类似方法的东西会很好Enum.values()
,因为我不想手动收集它们。
我能做的最好的是:
abstract sealed class Color permits Green, Red /*, ...*/ {
Iterable<Color> values() {
return Arrays.stream((Class<Color>[]) Color.class.getPermittedSubclasses())
.flatMap(subclass -> {
try {
return Stream.of(subclass.getDeclaredConstructor().newInstance());
} catch (ReflectiveOperationException ignore) {
return Stream.empty();
}
}).toList();
}
}