有没有为接口方法创建默认实现的首选方法或样式?假设我有一个常用的接口,在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);
}
}
与默认实现类(存在于其他地方但未被接口引用)相比,它具有更多的自记录性,并且最终更加灵活。使用此方法,您可以执行一些操作,例如仅在需要时将默认实现作为方法参数传递(您不能使用静态方法)。
当然,以上仅在不涉及状态的情况下有效。
我有两个方法和抽象类的接口,它们实现了这个接口并从它重写了一个方法。我可以实例这个抽象类,而不重写接口的其他方法吗?或者我可以用具有另一个签名的方法替换此方法吗? UPD:谢谢你的回答,我真的在我的问题上犯了错误。我是否可以使用匿名类来扩展我的抽象类,而不重写来自实现的所有方法?我如何理解DragonK的回答,不,我需要创建类,这将是扩展抽象类和重写其他方法?
问题内容: 如何命名你创建的不同类/接口?有时我没有实现信息要添加到实现名称中,例如接口和类。 发生这种情况时,我通常使用“普通”名称来命名接口,例如Truck并命名实际的类。 你在这方面如何命名接口和类? 问题答案: 命名你的名字。。不是因为它不是一个而是一个。 中的 是。然后你有,,等那个。 当你使用Interface代替子类时,只需将其转换为即可Truck。就像在List 。把I前面的只是匈
问题内容: 我不确定如何在我的抽象类中实现类似的接口。我有以下示例代码可用来尝试解决这个问题: 我有一个测试类,该类将创建Animal类型的对象,但是我希望在该类中具有一个可比的接口,以使发现的年纪高于低位。我不知道如何去解决这个问题。 问题答案: 您只需要定义即p。然后,您必须以自己喜欢的方式实现该方法。 使用的实现,具有较高级别的动物将获得更高的顺序。我希望你的想法和这个例子。
问题内容: 前一段时间,我遇到了一段代码,该代码使用了一些标准Java功能来定位实现给定接口的类。我知道这些函数隐藏在某些非逻辑的位置,但是由于包名称暗含,它们可以用于其他类。那时我不需要它,所以我忘记了它,但是现在我需要了,而且似乎无法再次找到这些函数。在哪里可以找到这些功能? 编辑:我不是在寻找任何IDE函数或任何东西,而是可以在Java应用程序中执行的东西。 问题答案: 不久前,我整理了一个
问题内容: 我有一个关于在接口中放置Java枚举的问题。为了使其更清楚,请参见以下代码: 我知道一个接口由带有 空主体 的方法组成。但是,我在这里使用的枚举需要一个构造函数和一个方法来获取关联的值。在此示例中,建议的接口将不仅包含空主体的方法。是否允许这种实现? 我不确定是否应该将枚举类放入接口或实现此接口的类中。 如果将枚举放入实现此接口的类中,则方法public Number getNumbe
我有一个关于在接口中放置Java枚举的问题。为了更清楚,请看下面的代码: 我知道一个接口由带有空主体的方法组成。但是,我在这里使用的枚举需要一个构造函数和一个方法来获取关联的值。在本例中,所建议的接口将不仅仅由具有空主体的方法组成。允许这种实现吗?