@SuppressWarnings("unchecked")
    public static <T> ImmutableSet<T> viewOf(final ImmutableSet<? extends T> s1, final ImmutableSet<? extends T> s2) {
        if (s1.isEmpty()) {
            return (ImmutableSet<T>) s2;
        } else if (s2.isEmpty()) {
            return (ImmutableSet<T>) s1;
        } else {
            return new ImmutableLazyUnionSet<>(s1, s2);
        }
    }