Closed
Description
UnmodifiableSetView
only offers immutability by throwing exceptions on inappropriate function calls.
These checks are done at runtime, and my code can call add
all day long; nothing will complain until I run the program.
UnmodifiableSetView
or any alternative should remove these functions from the interface and provide compile time checks. my code should not be allowed to call UnmodifiableSetView.add
because it should not exits in the first place.
mixin _UnmodifiableSetMixin<E> implements Set<E> {
static Never _throwUnmodifiable() {
throw UnsupportedError("Cannot change an unmodifiable set");
}
/// This operation is not supported by an unmodifiable set.
bool add(E value) => _throwUnmodifiable();
/// This operation is not supported by an unmodifiable set.
void clear() => _throwUnmodifiable();
/// This operation is not supported by an unmodifiable set.
void addAll(Iterable<E> elements) => _throwUnmodifiable();
/// This operation is not supported by an unmodifiable set.
void removeAll(Iterable<Object?> elements) => _throwUnmodifiable();
/// This operation is not supported by an unmodifiable set.
void retainAll(Iterable<Object?> elements) => _throwUnmodifiable();
/// This operation is not supported by an unmodifiable set.
void removeWhere(bool test(E element)) => _throwUnmodifiable();
/// This operation is not supported by an unmodifiable set.
void retainWhere(bool test(E element)) => _throwUnmodifiable();
/// This operation is not supported by an unmodifiable set.
bool remove(Object? value) => _throwUnmodifiable();
}