我想在 Java 中实现一个可迭代的不可变类。我这样做是通过以下方式:
public final class MyIterable implements Iterable<Integer> {
    private final Collection<Integer> items;
    public MyIterable(Collection<Integer> items) {
        this.items = Collections.unmodifiableCollection(new LinkedList<Integer>(items));
    }
    @Override
    public Iterator<Integer> iterator() {
        return items.iterator();
    }
}
这一切都很好,我无法在我的实例中更改任何内容。但是,我的类仍然公开了一个 API,表明它的内部可以通过迭代器上的 remove() 方法进行修改:
MyIterable myIterable = new MyIterable(Arrays.asList(1, 2, 3));
for (Iterator<Integer> it = myIterable.iterator(); it.hasNext();) {
    it.remove(); // I do not want to expose this even 
                 // though I know it will throw an error at runtime.
    it.next();
}
有什么方法可以避免暴露这个 remove 方法,从而让我的类暴露一个真正不可变的 API?理想的做法是实现类似的东西ReadOnlyIterable,但类似的东西在 Java 中似乎不可用。