强制客户端在扩展外部类时提供内部类的实现

Force client to provide implementation of an innerclass when extending an outerclass

我想知道是否可以强制客户在定义外部 class 的新实现时提供内部 class 的实现。

为了更好地解释情况:我有一个摘要 class

public abstract class ImmutablePolynomial implements Iterable {

    protected int degree;

    static ImmutablePolynomial sum(ImmutablePolynomial x, ImmutablePolynomial y) {
        .... Some Implementation using an iterator over terms and a return statement....
     }

     public abstract TermIterator iterator();

     Here I want an innerclass (TermIterator) extending Iterator that must be implemented 
     if you extend ImmutablePolynomial.

现在客户端可以提供 ImmutablePolynomial 的实现,使用特定的数据结构来减少内存使用,例如通过扩展 class。 我如何强制客户端也提供 Innerclass Implementing Iterator 的实现,以便 ImmutablePolynomial 中的静态方法 sum 也适用于客户端提供的实现?

此外,如果这是个坏主意/反模式/有更好的选择,请告诉我。我这样做是为了改进我的编码。

编辑 1:删除字段

protected Collection terms

,正如评论中所建议的那样。 编辑 2:制作方法

iterator()

按照评论中的建议进行摘要

鉴于 ImmutablePolynomial class 是抽象的,因此您永远不会拥有 class 为 ImmutablePolynomial 的对象,并且您不需要实例ImmutablePolynomial 的子class 使用 class ImmutablePolynomial.TermIterator,什么时候使用 ImmutablePolynomial.TermIterator ?将其实现为内部 class.

毫无意义

正如@Tassos 在评论中建议的那样,将 TermIterator 声明为接口;这可以嵌套在 class ImmutablePolynomial 中,也可以不嵌套,这取决于您的喜好。也使 ImmutablePolynomial.iterator() 抽象。

如果您在 ImmutablePolynomial 中有任何依赖迭代器的具体方法,请根据接口而不是针对任何特定实现来实现它们。无论如何,当您不仅允许而且要求 subclasses 提供它们自己的实现时,这是唯一明智的方法。