* @param <T> Item order type
*/
@Beta
-public interface ItemOrder<T extends ItemOrder<T>> {
+public sealed interface ItemOrder<T extends ItemOrder<T>> {
/**
* Items are ordered and their order is significant. A {@link List} is an example of a collection which conforms to
* this contract.
*/
- interface Ordered extends ItemOrder<Ordered> {
+ non-sealed interface Ordered extends ItemOrder<Ordered> {
@Override
default Class<Ordered> itemOrder() {
return Ordered.class;
* Items are unordered and their order is insignificant. A {@link Set} is an example of a collection which conforms
* to this contract.
*/
- interface Unordered extends ItemOrder<Unordered> {
+ non-sealed interface Unordered extends ItemOrder<Unordered> {
@Override
default Class<Unordered> itemOrder() {
return Unordered.class;
*
* @param <T> Mutation Type
*/
-// FIXME: sealed to allow Mutable and Immutable only when we have JDK17+
-// FIXME: consider hiding this interface afterwards
-public interface MutationBehaviour<T extends MutationBehaviour<T>> {
+sealed interface MutationBehaviour<T extends MutationBehaviour<T>> permits Immutable, Mutable {
// Marker interface only
}