作者:沉佩颖岳玲 | 来源:互联网 | 2024-10-11 18:44
是否有为接口方法创建默认实现的首选方法或样式?假设我有一个常用的界面,在90%的情况下我想要的功能是相同的.我的第一直觉是用静态方法创建一个具体的类.然后,当我想要默认功能时,我会
是否有为接口方法创建默认实现的首选方法或样式?假设我有一个常用的界面,在90%的情况下我想要的功能是相同的.
我的第一直觉是用静态方法创建一个具体的类.然后,当我想要默认功能时,我会将功能委托给静态方法.
这是一个简单的例子:
接口
public interface StuffDoer{
public abstract void doStuff();
}
具体实施方法
public class ConcreteStuffDoer{
public static void doStuff(){
dosomestuff...
}
}
使用默认功能的具体实现
public class MyClass implements StuffDoer{
public void doStuff(){
ConcreteSuffDoer.doStuff();
}
}
这里有更好的方法吗?
编辑
在看到一些提议的解决方案后,我想我应该更清楚我的意图.本质上我试图解决Java不允许多重继承.另外要明确我不是要声明Java是否应该允许多重继承.我只是在寻找为实现接口的类创建默认方法实现的最佳方法.
解决方法:
这是我要采取的方法:
public interface MyInterface {
MyInterface DEFAULT = new MyDefaultImplementation();
public static class MyDefaultImplemenation implements MyInterface {
}
}
当然,MyDefaultImplementation可能需要是私有的,或者它自己的顶级类,具体取决于什么是有意义的.
然后,您可以在实施中使用以下内容:
public class MyClass implements MyInterface {
@Override
public int someInterfaceMethod(String param) {
return DEFAULT.someInterfaceMethod(param);
}
}
它比其他地方存在但未被接口引用的默认实现类更自我记录,并且最终更灵活.有了这个,您可以在需要时将默认实现作为方法参数传递(您无法使用静态方法).
当然,只有在没有涉及国家的情况下,上述情况才有效.