重定向接口调用

时间:2013-09-08 17:06:01

标签: java reflection interface

我有几个课程:

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无​​需将调用写入每个函数的每个实现) 或者,如果你没有办法让它日食吗? 有很多课程我需要写相同的...

如果有人能告诉我这样做的话,我会很高兴。 提前谢谢。

3 个答案:

答案 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就越适合你。

看看at this answer

答案 2 :(得分:0)

在Java8中,将有一个名为default methods的功能。这基本上意味着接口可以提供它声明的方法的默认实现。

您可以在此处找到此功能的说明:

http://www.angelikalanger.com/Lambdas/LambdaTutorial/lambdatutorial_5.html