目前正在使用常规的deftype形式实现自定义的java.util.Iterator
(deftype MyIterator []
Iterator
(hasNext [this]
(my-custom-code))
(next [this]
(my-custom-code))
)
但我希望覆盖Iterator
上的默认方法forEachRemaining
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
... 使用更高效/更专业的实现。也许我甚至想要实现默认未实现的remove
default void remove() {
throw new UnsupportedOperationException("remove");
}
但deftype不支持方法重写。这是一个基本限制,还是因为Clojure早于Java 8中的默认方法而未实现的事情?无论如何,作为一个拥抱宿主的哲学语言,这对于使用/集成Java接口将非常有用。