0

有没有办法获取类中允许的子类实例的集合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();
  }
}
4

0 回答 0