我有这样的界面:
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风格妥协?
答案 0 :(得分: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。