2

我有一个这样的界面:

    public interface Foobar
    {
        default void foo( Bar bar )
        {
            foo( bar, 1 );
        }

        default void foo( Bar bar, int n )
        {
            for ( int i = 0; i < n; i++ )
            {
                foo( bar );
            }
        }
    }

一开始我以为这样就可以了:

    default void foo( byte[] b )
    {
        foo( b, 0, b.length );
    }

    void foo( byte[] b, int off, int len );

我的问题是我想执行foo一次或n多次。任何实现类都可以覆盖其中之一或两者。(第二种方法存在于性能关键系统中的批处理目的)

但似乎我的解决方案使用default的不是很好的风格,因为可以不覆盖它们并且调用任何一个都会导致无限循环(并最终导致 StackOverflow)。

所以,我的问题是:什么是好的 OOP 风格折衷方案?

4

1 回答 1

2

您的 IFoo 界面可能如下所示 -

public interface IFoo {

    default void foo(Bar bar, int n) {
        for (int i = 0; i < n; i++) {
            foo(bar);
        }
    }

    void foo(Bar bar);

}

实现 IFoo 接口的 Foo 类可以是这样的 -

public class Foo implements IFoo{

    @Override
    public void foo(Bar bar) {
        // process foo logic

    }

}

您不需要在接口内强制执行单循环逻辑,而是立即调用 foo。

于 2016-08-07T12:25:40.577 回答