我有几个课程:
public class SubclassA extends ClassA implements InterfaceA
public class SubclassB extends ClassB implements InterfaceA
public class SubclassC extends ClassC implements InterfaceA
...
是否有可能将所有函数调用重定向到可以在其他类/对象的接口中找到的函数?
表示如果是接口:
public interface InterfaceA{
public void doIt();
}
那就是HelperClass:
public class HelperClass implements InterfaceA{
public void doIt(){
...
}
}
是否有可能将SubclassA,SubclassB,SubclassC等类的所有调用重定向到HelperClass的函数doIt()? (Ofc无需将调用写入每个函数的每个实现) 或者,如果你没有办法让它日食吗? 有很多课程我需要写相同的...
如果有人能告诉我这样做的话,我会很高兴。 提前谢谢。
答案 0 :(得分:1)
您可以使用抽象类或等待Java 8.我们获得接口的default
实现。请参阅:http://blog.hartveld.com/2013/03/jdk-8-13-interface-default-method.html
在更复杂的应用程序中,您可以使用Aspect Oriented Programming (aop)
。但我想这对你来说不是一个选择。
答案 1 :(得分:0)
创建一个实现InterfaceA
接口的抽象类,基本上使你的HelperClass
抽象
public abstract class HelperClass implements InterfaceA {
public void doIt(){
... // do it
reallyDoIt();
}
public abstract void reallyDoIt();
}
然后让您的课程扩展HelperClass
。
回答
我可能会重定向所有来电
不,这是不可能的。您只能对在abstract
父类中明确实现的接口上的方法执行此操作。
另一种解决方案是使用Aspect Oriented Programming
拦截来自任何类的所有方法调用。这个主题有点先进,所以如果你有兴趣,我建议你查阅一下。我想的越多,我认为AOP就越适合你。
答案 2 :(得分:0)
在Java8中,将有一个名为default methods
的功能。这基本上意味着接口可以提供它声明的方法的默认实现。
您可以在此处找到此功能的说明:
http://www.angelikalanger.com/Lambdas/LambdaTutorial/lambdatutorial_5.html