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

时间:2016-04-05 21:22:19

标签: java iterator abstract-class inner-classes iterable

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

更好地解释一下情况:我有一个抽象类

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的实现,例如减少内存使用量。 我如何强制客户端也提供Innerclass Implementing Iterator的实现,以便ImmutablePolynomial中的静态方法sum也适用于客户端提供的实现?

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

编辑1:删除字段

  

受保护的收藏条款

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

  

迭代器()

在评论中提出的摘要

1 个答案:

答案 0 :(得分:0)

鉴于ImmutablePolynomial类是抽象的,所以你永远不会有一个类为ImmutablePolynomial的对象,并且你不想要ImmutablePolynomial&#的实例39; s子类使用类ImmutablePolynomial.TermIterator,何时使用ImmutablePolynomial.TermIterator ?将它作为内部类实现是没有意义的。

正如@Tassos在评论中建议的那样,将TermIterator声明为接口;根据您的喜好,这可能会嵌套在ImmutablePolynomial课程中。同时使ImmutablePolynomial.iterator()抽象。

如果ImmutablePolynomial中有任何依赖于迭代器的具体方法,则对接口实现它们而不是针对任何特定实现。当你不仅允许但要求子类提供自己的实现时,这是唯一理智的方法。